ha-mcp-dev 9.2.0.dev3435__tar.gz → 9.2.0.dev3444__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 (852) hide show
  1. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/PKG-INFO +1 -1
  2. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/pyproject.toml +1 -1
  3. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/pyproject.toml.orig +1 -1
  4. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/backup_entity_ids.py +3 -3
  5. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/backup_zones.py +4 -3
  6. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/config_helpers/core_payload.py +0 -30
  7. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/config_helpers/create.py +5 -14
  8. ha_mcp_dev-9.2.0.dev3444/src/ha_mcp/tools/config_helpers/icon_route.py +72 -0
  9. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/config_helpers/update.py +35 -12
  10. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/tools_config_helpers.py +1 -1
  11. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/tools_zones.py +99 -41
  12. ha_mcp_dev-9.2.0.dev3435/src/ha_mcp/tools/config_helpers/icon_route.py +0 -31
  13. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/LICENSE +0 -0
  14. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/README.md +0 -0
  15. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/__init__.py +0 -0
  16. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/__main__.py +0 -0
  17. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_pypi_marker +0 -0
  18. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_rich_compat.py +0 -0
  19. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/__init__.py +0 -0
  20. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
  21. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
  22. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
  23. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
  24. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
  25. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
  26. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
  27. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
  28. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
  29. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
  30. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
  31. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
  32. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
  33. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
  34. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
  35. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
  36. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
  37. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
  38. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
  39. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev_security.py +0 -0
  40. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
  41. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
  42. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
  43. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
  44. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
  45. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
  46. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
  47. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
  48. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
  49. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
  50. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
  51. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
  52. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
  53. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
  54. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
  55. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
  56. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
  57. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
  58. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
  59. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
  60. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
  61. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
  62. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
  63. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
  64. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
  65. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
  66. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
  67. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
  68. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
  69. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
  70. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
  71. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
  72. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
  73. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
  74. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
  75. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
  76. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
  77. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
  78. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
  79. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
  80. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
  81. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/client/mixins/skills.py +0 -0
  82. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
  83. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
  84. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
  85. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
  86. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
  87. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
  88. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
  89. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
  90. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
  91. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
  92. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
  93. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
  94. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
  95. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
  96. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
  97. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
  98. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
  99. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
  100. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
  101. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
  102. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
  103. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
  104. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
  105. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
  106. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
  107. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
  108. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
  109. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
  110. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
  111. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
  112. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
  113. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
  114. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
  115. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
  116. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
  117. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
  118. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
  119. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/jev_search.py +0 -0
  120. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
  121. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
  122. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
  123. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
  124. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
  125. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
  126. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
  127. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
  128. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
  129. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
  130. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
  131. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
  132. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
  133. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
  134. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
  135. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
  136. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
  137. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
  138. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
  139. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
  140. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
  141. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
  142. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
  143. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
  144. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
  145. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
  146. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
  147. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
  148. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
  149. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
  150. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
  151. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
  152. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
  153. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
  154. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
  155. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
  156. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
  157. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
  158. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
  159. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
  160. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
  161. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
  162. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
  163. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
  164. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
  165. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
  166. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
  167. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
  168. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
  169. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
  170. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
  171. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
  172. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
  173. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
  174. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
  175. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
  176. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
  177. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
  178. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
  179. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
  180. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
  181. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
  182. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
  183. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
  184. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
  185. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
  186. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
  187. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
  188. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
  189. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
  190. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
  191. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
  192. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/mixins/extensions.py +0 -0
  193. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
  194. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
  195. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
  196. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
  197. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
  198. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
  199. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
  200. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
  201. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
  202. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
  203. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
  204. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
  205. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
  206. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
  207. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
  208. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
  209. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
  210. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
  211. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
  212. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
  213. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
  214. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
  215. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
  216. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
  217. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
  218. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
  219. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
  220. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
  221. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
  222. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
  223. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
  224. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
  225. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
  226. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
  227. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
  228. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
  229. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
  230. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
  231. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
  232. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
  233. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
  234. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
  235. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
  236. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
  237. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
  238. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
  239. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
  240. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
  241. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/skills/__init__.py +0 -0
  242. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/skills/_constants.py +0 -0
  243. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/skills/_resources.py +0 -0
  244. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/skills/_snapshot.py +0 -0
  245. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/skills/_source.py +0 -0
  246. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/skills/client.py +0 -0
  247. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/skills/extension.py +0 -0
  248. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/skills/models.py +0 -0
  249. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
  250. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
  251. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
  252. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
  253. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
  254. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
  255. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
  256. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
  257. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
  258. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
  259. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
  260. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
  261. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
  262. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
  263. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
  264. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
  265. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
  266. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
  267. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
  268. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
  269. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
  270. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
  271. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
  272. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
  273. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
  274. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
  275. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
  276. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
  277. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
  278. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
  279. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
  280. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
  281. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
  282. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
  283. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
  284. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
  285. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
  286. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
  287. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
  288. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
  289. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
  290. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
  291. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
  292. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
  293. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
  294. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
  295. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
  296. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
  297. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
  298. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
  299. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
  300. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
  301. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
  302. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
  303. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
  304. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
  305. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
  306. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
  307. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
  308. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
  309. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
  310. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
  311. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
  312. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
  313. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
  314. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
  315. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
  316. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
  317. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
  318. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
  319. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
  320. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
  321. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
  322. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
  323. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
  324. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
  325. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
  326. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
  327. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
  328. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
  329. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
  330. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
  331. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
  332. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
  333. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
  334. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
  335. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
  336. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
  337. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
  338. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
  339. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
  340. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
  341. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
  342. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
  343. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
  344. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
  345. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
  346. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
  347. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
  348. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
  349. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
  350. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
  351. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
  352. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
  353. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
  354. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
  355. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
  356. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
  357. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
  358. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
  359. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
  360. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
  361. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
  362. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
  363. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
  364. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
  365. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
  366. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
  367. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
  368. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
  369. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
  370. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
  371. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
  372. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
  373. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
  374. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
  375. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
  376. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
  377. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
  378. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
  379. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
  380. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
  381. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
  382. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
  383. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
  384. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
  385. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
  386. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
  387. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
  388. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
  389. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
  390. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
  391. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
  392. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
  393. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
  394. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
  395. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
  396. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
  397. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
  398. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
  399. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
  400. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
  401. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
  402. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
  403. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
  404. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
  405. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
  406. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/shared/_request_clock.py +0 -0
  407. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
  408. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
  409. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
  410. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
  411. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
  412. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
  413. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
  414. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
  415. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
  416. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
  417. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
  418. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
  419. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
  420. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
  421. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
  422. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
  423. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
  424. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
  425. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
  426. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
  427. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
  428. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
  429. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
  430. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
  431. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
  432. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
  433. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
  434. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
  435. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
  436. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
  437. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
  438. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
  439. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
  440. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
  441. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
  442. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
  443. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/requirements.txt +0 -0
  444. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
  445. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
  446. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
  447. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
  448. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
  449. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
  450. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
  451. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
  452. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
  453. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
  454. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
  455. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
  456. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
  457. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/client.py +0 -0
  458. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
  459. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
  460. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
  461. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
  462. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
  463. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
  464. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
  465. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
  466. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
  467. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
  468. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
  469. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
  470. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
  471. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
  472. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
  473. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
  474. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
  475. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
  476. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
  477. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
  478. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
  479. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
  480. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/server.py +0 -0
  481. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
  482. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
  483. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
  484. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
  485. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
  486. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
  487. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
  488. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
  489. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
  490. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
  491. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
  492. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
  493. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
  494. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
  495. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
  496. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
  497. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
  498. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
  499. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_vendor/websockets/version.py +0 -0
  500. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/_version.py +0 -0
  501. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/app_discovery.py +0 -0
  502. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/auth/__init__.py +0 -0
  503. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/auth/consent_form.py +0 -0
  504. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/auth/iss_stamp.py +0 -0
  505. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/auth/oidc_compat.py +0 -0
  506. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/auth/provider.py +0 -0
  507. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/backup_calendar.py +0 -0
  508. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/backup_dashboards.py +0 -0
  509. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/backup_diff.py +0 -0
  510. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/backup_entities.py +0 -0
  511. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/backup_files.py +0 -0
  512. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/backup_helper_target.py +0 -0
  513. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/backup_integrations.py +0 -0
  514. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/backup_manager.py +0 -0
  515. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/backup_tags.py +0 -0
  516. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/backup_todo.py +0 -0
  517. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/browser_landing.py +0 -0
  518. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/client/__init__.py +0 -0
  519. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/client/admin_routes.py +0 -0
  520. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/client/config_entry_read.py +0 -0
  521. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/client/error_log_journald.py +0 -0
  522. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/client/event_listeners.py +0 -0
  523. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/client/models.py +0 -0
  524. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/client/rest_client.py +0 -0
  525. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/client/supervisor_client.py +0 -0
  526. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/client/websocket_client.py +0 -0
  527. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/client/websocket_listener.py +0 -0
  528. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/client/websocket_state.py +0 -0
  529. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/config.py +0 -0
  530. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/config_backup.py +0 -0
  531. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/config_meta.py +0 -0
  532. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/config_overrides.py +0 -0
  533. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/config_registry.py +0 -0
  534. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/config_settings.py +0 -0
  535. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
  536. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
  537. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
  538. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/dashboard_screenshot/engine_compat.py +0 -0
  539. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
  540. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
  541. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/dashboard_screenshot/theme_check.py +0 -0
  542. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
  543. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/errors.py +0 -0
  544. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/ha_request_queue.py +0 -0
  545. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/hacs_auto_refresh.py +0 -0
  546. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/http_transport.py +0 -0
  547. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/image_info.py +0 -0
  548. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/ipv6_lan_guard.py +0 -0
  549. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/listen_sockets.py +0 -0
  550. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/llm_exposure.py +0 -0
  551. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/log_filters.py +0 -0
  552. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/mcp_client_context.py +0 -0
  553. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/policy/__init__.py +0 -0
  554. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/policy/approval_queue.py +0 -0
  555. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/policy/decision_pin.py +0 -0
  556. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/policy/decisions.py +0 -0
  557. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/policy/editing.py +0 -0
  558. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/policy/evaluator.py +0 -0
  559. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/policy/events.py +0 -0
  560. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/policy/handlers.py +0 -0
  561. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/policy/middleware.py +0 -0
  562. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/policy/model.py +0 -0
  563. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/policy/mrtr.py +0 -0
  564. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/policy/persistence.py +0 -0
  565. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/policy/server_channels.py +0 -0
  566. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/policy/value_sources.py +0 -0
  567. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/py.typed +0 -0
  568. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/read_only.py +0 -0
  569. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/redaction.py +0 -0
  570. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/renamed_tools.py +0 -0
  571. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  572. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  573. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
  574. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-actions.md +0 -0
  575. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
  576. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
  577. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  578. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  579. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  580. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  581. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  582. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  583. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  584. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
  585. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  586. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/triggers-and-conditions.md +0 -0
  587. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
  588. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/server.py +0 -0
  589. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/server_instructions.py +0 -0
  590. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/server_lifespan.py +0 -0
  591. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/server_tool_text.py +0 -0
  592. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/settings_ui/__init__.py +0 -0
  593. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
  594. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
  595. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
  596. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/settings_ui/_handlers_oauth_callbacks.py +0 -0
  597. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
  598. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
  599. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
  600. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/settings_ui/_i18n.py +0 -0
  601. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
  602. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/settings_ui/_persistence.py +0 -0
  603. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
  604. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/settings_ui/_theme.py +0 -0
  605. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
  606. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/settings_ui/locales/README.md +0 -0
  607. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/settings_ui/locales/az.json +0 -0
  608. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
  609. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/settings_ui/locales/de.json +0 -0
  610. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/settings_ui/locales/en.json +0 -0
  611. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
  612. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/settings_ui/locales/es.json +0 -0
  613. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
  614. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/settings_ui/locales/hu.json +0 -0
  615. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/settings_ui/locales/it.json +0 -0
  616. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
  617. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
  618. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
  619. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
  620. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
  621. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
  622. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
  623. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
  624. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/settings_ui/settings.css +0 -0
  625. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/settings_ui/settings.html +0 -0
  626. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/settings_ui/settings_js/01_i18n_state.js +0 -0
  627. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/settings_ui/settings_js/02_tools_restart.js +0 -0
  628. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/settings_ui/settings_js/03_render_save.js +0 -0
  629. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/settings_ui/settings_js/04_backups.js +0 -0
  630. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/settings_ui/settings_js/05_feature_flags.js +0 -0
  631. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/settings_ui/settings_js/06_policy_cards.js +0 -0
  632. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/settings_ui/settings_js/07_policy_actions.js +0 -0
  633. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/settings_ui/settings_js/08_advanced.js +0 -0
  634. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/settings_ui/settings_js/09_prefs_visibility.js +0 -0
  635. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/settings_ui/settings_js/10_oauth_callbacks.js +0 -0
  636. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/smoke_test.py +0 -0
  637. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  638. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/storage_helper_types.py +0 -0
  639. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/strict_bps.py +0 -0
  640. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tool_catalog.py +0 -0
  641. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tool_dispatch.py +0 -0
  642. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/__init__.py +0 -0
  643. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/addon_connection_hints.py +0 -0
  644. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/area_messages.py +0 -0
  645. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/auto_backup.py +0 -0
  646. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/automation_errors.py +0 -0
  647. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/automation_registry_details.py +0 -0
  648. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/backup.py +0 -0
  649. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/backup_access.py +0 -0
  650. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/backup_on_demand.py +0 -0
  651. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/backup_snapshot.py +0 -0
  652. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/backup_snapshot_restore.py +0 -0
  653. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  654. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/best_practice_result.py +0 -0
  655. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/best_practice_variables.py +0 -0
  656. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/blueprint_sources.py +0 -0
  657. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
  658. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/blueprint_write.py +0 -0
  659. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/bug_report_config.py +0 -0
  660. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/bug_report_redaction.py +0 -0
  661. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/bug_report_sources.py +0 -0
  662. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/bug_report_templates.py +0 -0
  663. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/bulk_selector.py +0 -0
  664. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/coercion.py +0 -0
  665. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/component_api.py +0 -0
  666. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/component_automation.py +0 -0
  667. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/component_config_entries.py +0 -0
  668. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/component_config_reads.py +0 -0
  669. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
  670. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/component_devices.py +0 -0
  671. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/component_helper_collections.py +0 -0
  672. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/component_registries.py +0 -0
  673. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
  674. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/component_todo.py +0 -0
  675. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/config_entry_backup.py +0 -0
  676. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/config_entry_flow.py +0 -0
  677. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/config_entry_flow_errors.py +0 -0
  678. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
  679. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/config_entry_flow_introspect.py +0 -0
  680. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
  681. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/config_entry_flow_progress.py +0 -0
  682. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
  683. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/config_entry_identity.py +0 -0
  684. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
  685. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/config_file_visibility.py +0 -0
  686. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/config_helpers/__init__.py +0 -0
  687. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/config_helpers/describe.py +0 -0
  688. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/config_helpers/flow.py +0 -0
  689. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/config_helpers/listing.py +0 -0
  690. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/config_helpers/registry.py +0 -0
  691. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/config_helpers/schemas.py +0 -0
  692. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/config_helpers/typed_config.py +0 -0
  693. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/config_helpers/validation.py +0 -0
  694. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/config_subentry_restore.py +0 -0
  695. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/config_write_errors.py +0 -0
  696. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/config_write_helpers.py +0 -0
  697. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/core_contract.py +0 -0
  698. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/dashboard_card_describe.py +0 -0
  699. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
  700. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/dashboard_list_checks.py +0 -0
  701. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/dashboard_read_errors.py +0 -0
  702. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/dev_backup.py +0 -0
  703. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/device_control.py +0 -0
  704. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/device_enrichment.py +0 -0
  705. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/diagnostics_helpers.py +0 -0
  706. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/energy_preferences.py +0 -0
  707. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/entity_expose_batch.py +0 -0
  708. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/entity_param_parsing.py +0 -0
  709. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/entity_registration.py +0 -0
  710. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/entity_removal.py +0 -0
  711. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/entity_update_fields.py +0 -0
  712. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/error_log_parsing.py +0 -0
  713. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/event_call.py +0 -0
  714. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/event_listener_fields.py +0 -0
  715. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/file_edit_refusal.py +0 -0
  716. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/flow_helper_lookup.py +0 -0
  717. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/flow_translations.py +0 -0
  718. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/hacs_backend.py +0 -0
  719. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/hacs_own_repository.py +0 -0
  720. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/hacs_registration.py +0 -0
  721. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/helper_flows.py +0 -0
  722. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/helpers.py +0 -0
  723. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/history_response.py +0 -0
  724. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/ignored_entries.py +0 -0
  725. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/integration_entry_state.py +0 -0
  726. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/integration_flow_steps.py +0 -0
  727. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/integration_schema.py +0 -0
  728. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/integration_ws_commands.py +0 -0
  729. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/log_common.py +0 -0
  730. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/log_sources.py +0 -0
  731. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/log_sources_fault.py +0 -0
  732. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/log_sources_logbook.py +0 -0
  733. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
  734. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/radio/__init__.py +0 -0
  735. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/radio/base.py +0 -0
  736. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/radio/matter.py +0 -0
  737. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/radio/thread.py +0 -0
  738. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/radio/zigbee.py +0 -0
  739. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/radio/zwave.py +0 -0
  740. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/radio/zwave_parameters.py +0 -0
  741. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/recorder_errors.py +0 -0
  742. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/reference_validator.py +0 -0
  743. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/registry.py +0 -0
  744. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
  745. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/resource_codec.py +0 -0
  746. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/resource_patch.py +0 -0
  747. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/response_helpers.py +0 -0
  748. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/scene_discovery.py +0 -0
  749. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/search/__init__.py +0 -0
  750. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/search/base.py +0 -0
  751. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/search/component.py +0 -0
  752. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/search/entities.py +0 -0
  753. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/search/legacy.py +0 -0
  754. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/search/modes.py +0 -0
  755. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/search/overview.py +0 -0
  756. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/search/response.py +0 -0
  757. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/search/state.py +0 -0
  758. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/server_version.py +0 -0
  759. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  760. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  761. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  762. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
  763. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  764. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  765. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/smart_search/_flow_helpers.py +0 -0
  766. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
  767. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  768. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  769. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  770. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/statistics_calendar.py +0 -0
  771. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/statistics_helpers.py +0 -0
  772. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/statistics_resets.py +0 -0
  773. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/system_restart.py +0 -0
  774. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/tool_hints.py +0 -0
  775. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
  776. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/tools_addons.py +0 -0
  777. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/tools_areas.py +0 -0
  778. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
  779. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  780. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  781. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/tools_calendar.py +0 -0
  782. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/tools_camera.py +0 -0
  783. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/tools_categories.py +0 -0
  784. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/tools_code.py +0 -0
  785. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/tools_config_automations.py +0 -0
  786. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
  787. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
  788. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
  789. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
  790. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/tools_dev.py +0 -0
  791. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/tools_energy.py +0 -0
  792. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/tools_entities.py +0 -0
  793. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  794. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/tools_groups.py +0 -0
  795. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/tools_hacs.py +0 -0
  796. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/tools_history.py +0 -0
  797. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/tools_integrations.py +0 -0
  798. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/tools_labels.py +0 -0
  799. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/tools_logs.py +0 -0
  800. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/tools_radio.py +0 -0
  801. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/tools_registry.py +0 -0
  802. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/tools_resources.py +0 -0
  803. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/tools_search.py +0 -0
  804. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/tools_security_policy.py +0 -0
  805. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/tools_service.py +0 -0
  806. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/tools_services.py +0 -0
  807. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/tools_system.py +0 -0
  808. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/tools_themes.py +0 -0
  809. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/tools_todo.py +0 -0
  810. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/tools_traces.py +0 -0
  811. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/tools_updates.py +0 -0
  812. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/tools_utility.py +0 -0
  813. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  814. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  815. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
  816. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/update_categories.py +0 -0
  817. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/util_helpers.py +0 -0
  818. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/validation_middleware.py +0 -0
  819. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/ws_waiters.py +0 -0
  820. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/tools/yaml_extra_keys.py +0 -0
  821. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/transforms/__init__.py +0 -0
  822. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/transforms/categorized_search.py +0 -0
  823. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/transforms/compact_params.py +0 -0
  824. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/transforms/component_helpers.py +0 -0
  825. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/transforms/component_search.py +0 -0
  826. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  827. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/transforms/write_tool_note.py +0 -0
  828. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/transport_security.py +0 -0
  829. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/update_check.py +0 -0
  830. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/utils/__init__.py +0 -0
  831. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/utils/config_hash.py +0 -0
  832. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/utils/config_write_lock.py +0 -0
  833. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/utils/dashboard_patch.py +0 -0
  834. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/utils/data_paths.py +0 -0
  835. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
  836. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/utils/domain_handlers.py +0 -0
  837. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/utils/entity_membership.py +0 -0
  838. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  839. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  840. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/utils/mcp_client_host.py +0 -0
  841. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/utils/operation_manager.py +0 -0
  842. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/utils/python_sandbox.py +0 -0
  843. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/utils/registry_update_lock.py +0 -0
  844. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/utils/skill_loader.py +0 -0
  845. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/utils/usage_logger.py +0 -0
  846. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/visibility/__init__.py +0 -0
  847. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/visibility/config_files.py +0 -0
  848. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/visibility/enforcement.py +0 -0
  849. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/visibility/identifier_aliases.py +0 -0
  850. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/visibility/model.py +0 -0
  851. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/visibility/persistence.py +0 -0
  852. {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3444}/src/ha_mcp/visibility/resolver.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ha-mcp-dev
3
- Version: 9.2.0.dev3435
3
+ Version: 9.2.0.dev3444
4
4
  Summary: Configure and automate Home Assistant with Claude, ChatGPT, and other AI assistants.
5
5
  Keywords: mcp,home-assistant,ai,automation,smart-home
6
6
  Author: Julien
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "9.2.0.dev3435"
7
+ version = "9.2.0.dev3444"
8
8
  description = "Configure and automate Home Assistant with Claude, ChatGPT, and other AI assistants."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13,<3.15"
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "9.2.0.dev3435"
7
+ version = "9.2.0.dev3444"
8
8
  description = "Configure and automate Home Assistant with Claude, ChatGPT, and other AI assistants."
9
9
  readme = "README.md"
10
10
  # Upper bound widened to <3.15 so the package installs on Home Assistant's
@@ -46,9 +46,9 @@ async def with_registry_icon(
46
46
  """The stored item plus the icon its entity's registry entry sets, if any.
47
47
 
48
48
  The registry icon is the one the entity shows, and the helper tools write
49
- it there (an update always; a create for a zone, or when Core's schema
50
- has no icon field or cannot be read), so the stored item alone can miss
51
- it. A failed registry read
49
+ it there when Core's schema has no icon field or cannot be read (older
50
+ versions also for zones and on every update), so the stored item alone
51
+ can miss it. A failed registry read
52
52
  propagates, so the capture reports it instead of saving a snapshot
53
53
  without the icon.
54
54
  """
@@ -1,8 +1,9 @@
1
1
  """The zone a zone tool names, its registry icon, and a removed zone on restore.
2
2
 
3
- The helper tools keep a zone's icon in the entity registry unless the stored
4
- zone already has one (#2643), so the stored item alone can miss it: the
5
- snapshot records the registry's icon too. Core's ``zone/update`` needs the
3
+ A zone's entity can carry an icon override in the entity registry (set with
4
+ ha_set_entity, or by older ha-mcp versions in place of the stored icon), so
5
+ the stored item alone can miss it: the snapshot records the registry's icon
6
+ too. Core's ``zone/update`` needs the
6
7
  stored zone; once it was removed, the restore creates it again, and Core takes
7
8
  the new zone's id from the slug of its name. Core keeps a removed zone's
8
9
  registry entry for 30 days, so a zone created again under its old id in that
@@ -61,7 +61,6 @@ def merged_update(
61
61
  name: str | None,
62
62
  icon: str | None,
63
63
  fields: dict[str, Any],
64
- entity_id: str,
65
64
  ) -> dict[str, Any]:
66
65
  """The stored item plus the changes: Core's update writes the whole item.
67
66
 
@@ -75,8 +74,6 @@ def merged_update(
75
74
  body.pop("name", None)
76
75
  if name is not None:
77
76
  body["name"] = name
78
- if helper_type == "zone":
79
- icon = _zone_item_icon(stored, icon, entity_id)
80
77
  if icon is not None:
81
78
  if icon:
82
79
  body["icon"] = icon
@@ -86,33 +83,6 @@ def merged_update(
86
83
  return body
87
84
 
88
85
 
89
- def _zone_item_icon(
90
- stored: dict[str, Any], icon: str | None, entity_id: str
91
- ) -> str | None:
92
- """The icon to write into a zone's stored item, ``None`` to leave it (#2643).
93
-
94
- The zone entity shows the registry icon over the item's, and Core's zone
95
- update merges into the item and rejects an empty icon, so an icon stored
96
- there can never be removed. A new icon therefore goes into the item only
97
- when it already holds one; otherwise the registry alone carries it and
98
- stays clearable. Clearing an icon the item holds is refused.
99
- """
100
- if not stored.get("icon"):
101
- return None
102
- if icon == "":
103
- raise_tool_error(
104
- create_error_response(
105
- ErrorCode.VALIDATION_INVALID_PARAMETER,
106
- f"The icon of {entity_id} cannot be removed: the zone's stored "
107
- f"icon ({stored['icon']}) is kept by Home Assistant's zone update "
108
- "and would show again.",
109
- context=_simple_helper_error_context("zone", entity_id=entity_id),
110
- suggestions=["Set a different icon instead of an empty one"],
111
- )
112
- )
113
- return icon
114
-
115
-
116
86
  def _reject(helper_type: str, message: str, **context: Any) -> None:
117
87
  raise_tool_error(
118
88
  create_error_response(
@@ -17,7 +17,7 @@ from ..ws_waiters import wait_for_entity_registered
17
17
  from .core_payload import (
18
18
  with_create_defaults,
19
19
  )
20
- from .icon_route import collection_icon
20
+ from .icon_route import icon_targets, note_hidden_icon
21
21
  from .registry import _ws_error_msg
22
22
  from .schemas import (
23
23
  _attach_helper_skill,
@@ -125,24 +125,14 @@ async def _execute_create_simple_helper(
125
125
  )
126
126
  )
127
127
 
128
- # A zone's update merges into the stored item and rejects an empty icon, so
129
- # an icon stored there can never be removed: a new zone's icon goes to the
130
- # entity registry (#2643), like the icon of a type whose schema has none or
131
- # cannot be read.
132
- item_icon = (
133
- None
134
- if helper_type == "zone"
135
- else await collection_icon(client, helper_type, "create", icon)
136
- )
137
- registry_icon = icon if item_icon is None else None
138
- message = _build_create_message(
139
- helper_type, name, None if registry_icon else icon, fields
140
- )
128
+ item_icon, registry_icon = await icon_targets(client, helper_type, "create", icon)
129
+ message = _build_create_message(helper_type, name, item_icon, fields)
141
130
  native = await _create_via_component(
142
131
  client, helper_type, message, area_id, labels, category, registry_icon
143
132
  )
144
133
  if native is not None:
145
134
  native_data, native_entity_id, native_warnings = native
135
+ await note_hidden_icon(client, native_entity_id, item_icon, native_warnings)
146
136
  create_response = _helper_response(
147
137
  "create",
148
138
  helper_type,
@@ -212,6 +202,7 @@ async def _execute_create_simple_helper(
212
202
  registry_icon,
213
203
  )
214
204
  await _apply_create_category(client, entity_id, category, helper_data, warnings)
205
+ await note_hidden_icon(client, entity_id, item_icon, warnings)
215
206
 
216
207
  create_response = _helper_response(
217
208
  "create",
@@ -0,0 +1,72 @@
1
+ """Route a storage helper's icon by the running Core collection's own fields."""
2
+
3
+ from typing import Any
4
+
5
+ from ...client.rest_client import HomeAssistantError
6
+ from ..component_helper_collections import fetch_helper_schemas
7
+
8
+
9
+ async def icon_targets(
10
+ client: Any, helper_type: str, action: str, icon: str | None
11
+ ) -> tuple[str | None, str | None]:
12
+ """Where an icon is written: ``(stored item, entity registry)``.
13
+
14
+ The item takes the icon when Core's ``action`` schema for the type
15
+ declares an ``icon`` field (person and tag declare none), and then the
16
+ registry does not: the helper and zone dialogs write the icon only to the
17
+ item, and a registry override would hide every later change made there
18
+ (#3001). A type without the field keeps its icon in the registry.
19
+
20
+ When the schemas cannot be read (no component, or a failed read) or do
21
+ not list the type or action, nothing is guessed: the icon goes to the
22
+ registry, as the entity settings set it, and a cleared icon ('') clears
23
+ both, since clearing only the registry would bring an older stored icon
24
+ back. A zone keeps its icon in the item even then: its schema has always
25
+ declared one, and the Zones editor shows only the stored icon.
26
+ """
27
+ if icon is None:
28
+ return None, None
29
+ schemas = await fetch_helper_schemas(client)
30
+ fields = schemas.get(helper_type, {}).get(action) if schemas else None
31
+ if isinstance(fields, list):
32
+ if any(isinstance(f, dict) and f.get("name") == "icon" for f in fields):
33
+ return icon, None
34
+ return None, icon
35
+ if helper_type == "zone":
36
+ return icon, None
37
+ return (icon, icon) if icon == "" else (None, icon)
38
+
39
+
40
+ async def note_hidden_icon(
41
+ client: Any, entity_id: str | None, item_icon: str | None, warnings: list[str]
42
+ ) -> None:
43
+ """Warn when the entity's registry icon hides the icon just stored or
44
+ cleared.
45
+
46
+ The entity shows a registry icon over the stored one, and older ha-mcp
47
+ versions kept icons there (a zone's alone, every helper's on update), so
48
+ a changed or cleared stored icon can stay invisible. The registry read is
49
+ advisory: when it fails the write has still succeeded, so no warning is
50
+ given.
51
+ """
52
+ if item_icon is None or not entity_id:
53
+ return
54
+ try:
55
+ result = await client.send_websocket_message(
56
+ {"type": "config/entity_registry/get", "entity_id": entity_id}
57
+ )
58
+ except (HomeAssistantError, OSError, TimeoutError):
59
+ return
60
+ entry = result.get("result") if result.get("success") else None
61
+ override = entry.get("icon") if isinstance(entry, dict) else None
62
+ if not override or override == item_icon:
63
+ return
64
+ shown = (
65
+ f"shows its entity registry icon {override} over the stored icon {item_icon}"
66
+ if item_icon
67
+ else f"still shows its entity registry icon {override}"
68
+ )
69
+ warnings.append(
70
+ f"{entity_id} {shown}; clear it with "
71
+ f"ha_set_entity(entity_id='{entity_id}', icon='')."
72
+ )
@@ -22,7 +22,7 @@ from ..config_write_helpers import apply_entity_category
22
22
  from ..helpers import raise_tool_error, ws_failure_code
23
23
  from ..ws_waiters import wait_for_entity_registered
24
24
  from .core_payload import merged_update
25
- from .icon_route import collection_icon
25
+ from .icon_route import icon_targets, note_hidden_icon
26
26
  from .listing import listed_items
27
27
  from .registry import _ws_error_msg
28
28
  from .schemas import (
@@ -67,13 +67,12 @@ async def _execute_legacy_update(
67
67
  entity_id: str,
68
68
  unique_id: str,
69
69
  name: str | None,
70
- icon: str | None,
70
+ item_icon: str | None,
71
71
  fields: dict[str, Any],
72
72
  ) -> dict[str, Any]:
73
73
  """Update through Core's ``<type>/update`` WS command (no component)."""
74
74
  stored = await _stored_item(client, helper_type, entity_id, unique_id)
75
- item_icon = await collection_icon(client, helper_type, "update", icon)
76
- body = merged_update(helper_type, stored, name, item_icon, fields, entity_id)
75
+ body = merged_update(helper_type, stored, name, item_icon, fields)
77
76
  result = await client.send_websocket_message(
78
77
  {**body, "type": f"{helper_type}/update", f"{helper_type}_id": unique_id}
79
78
  )
@@ -246,13 +245,15 @@ async def _execute_update_simple_helper(
246
245
  )
247
246
 
248
247
  warnings: list[str] = []
248
+ item_icon, registry_icon = await icon_targets(client, helper_type, "update", icon)
249
249
  native = await _update_via_component(
250
250
  client,
251
251
  helper_type,
252
252
  entity_id,
253
253
  helper_id,
254
254
  name,
255
- icon,
255
+ item_icon,
256
+ registry_icon,
256
257
  area_id,
257
258
  labels,
258
259
  category,
@@ -260,6 +261,7 @@ async def _execute_update_simple_helper(
260
261
  )
261
262
  if native is not None:
262
263
  updated_data, entity, warnings = native
264
+ _note_kept_icon(helper_type, item_icon, updated_data, warnings)
263
265
  else:
264
266
  stored = await stored_helper_target(client, helper_type, helper_id, name)
265
267
  if stored is not None:
@@ -270,13 +272,14 @@ async def _execute_update_simple_helper(
270
272
  )
271
273
  entity, reason = entity_id, None
272
274
  updated_data = await _execute_legacy_update(
273
- client, helper_type, entity or helper_id, unique_id, name, icon, fields
275
+ client, helper_type, entity or helper_id, unique_id, name, item_icon, fields
274
276
  )
277
+ _note_kept_icon(helper_type, item_icon, updated_data, warnings)
275
278
  if entity is None:
276
279
  given = [
277
280
  field
278
281
  for field, value in (
279
- ("icon", icon),
282
+ ("icon", registry_icon),
280
283
  ("area", area_id),
281
284
  ("labels", labels),
282
285
  ("category", category),
@@ -298,7 +301,7 @@ async def _execute_update_simple_helper(
298
301
  await _apply_update_registry_and_category(
299
302
  client,
300
303
  entity_id,
301
- icon,
304
+ registry_icon,
302
305
  area_id,
303
306
  labels,
304
307
  category,
@@ -315,6 +318,7 @@ async def _execute_update_simple_helper(
315
318
  except Exception as e: # noqa: BLE001
316
319
  warnings.append(f"Update applied but verification failed: {e}")
317
320
 
321
+ await note_hidden_icon(client, entity, item_icon, warnings)
318
322
  update_response = _helper_response(
319
323
  "update",
320
324
  helper_type,
@@ -333,7 +337,8 @@ async def _update_via_component(
333
337
  entity_id: str,
334
338
  helper_id: str,
335
339
  name: str | None,
336
- icon: str | None,
340
+ item_icon: str | None,
341
+ registry_icon: str | None,
337
342
  area_id: str | None,
338
343
  labels: list[str] | None,
339
344
  category: str | None,
@@ -353,12 +358,11 @@ async def _update_via_component(
353
358
  # The component names the item's own entity; without one the storage id
354
359
  # names the item, never the caller's guessed entity_id.
355
360
  entity_id = item.get("entity_id") or helper_id
356
- item_icon = await collection_icon(client, helper_type, "update", icon)
357
- body = merged_update(helper_type, item["item"], name, item_icon, fields, entity_id)
361
+ body = merged_update(helper_type, item["item"], name, item_icon, fields)
358
362
  registry = {
359
363
  key: value
360
364
  for key, value in (
361
- ("icon", icon),
365
+ ("icon", registry_icon),
362
366
  ("area_id", area_id),
363
367
  ("labels", labels),
364
368
  ("category", category),
@@ -375,3 +379,22 @@ async def _update_via_component(
375
379
  error_context=_simple_helper_error_context(helper_type, entity_id=entity_id),
376
380
  )
377
381
  return None if result is None else native_result(result)
382
+
383
+
384
+ def _note_kept_icon(
385
+ helper_type: str,
386
+ item_icon: str | None,
387
+ updated_data: dict[str, Any],
388
+ warnings: list[str],
389
+ ) -> None:
390
+ """Say so when Core kept a stored icon the caller cleared.
391
+
392
+ A zone's update merges into the stored item, so leaving the icon out keeps
393
+ it, as it does when the zone dialog's icon is emptied and saved.
394
+ """
395
+ if item_icon == "" and updated_data.get("icon"):
396
+ warnings.append(
397
+ f"Home Assistant kept the {helper_type}'s icon "
398
+ f"{updated_data['icon']}: its update keeps a stored icon, as the "
399
+ f"{helper_type} dialog does, so it can be changed but not removed."
400
+ )
@@ -598,7 +598,7 @@ class HelperConfigTools:
598
598
  icon: Annotated[
599
599
  str | None,
600
600
  Field(
601
- description="Material Design Icon (e.g., 'mdi:bell'); '' or ' ' clears it, except a zone's stored icon (the icon in the zone's own config, as the Home Assistant UI stores it; ha_get_zone shows it), which cannot be removed. On create, a storage helper's icon goes into its stored config when Home Assistant's schema for the type has an icon field, otherwise (person, tag, a new zone, or without the ha_mcp_tools component) into the entity registry; an update always sets the registry icon, and the stored icon too where the schema has one. Restoring a storage helper's automatic backup also puts back its registry icon, unless the backup predates registry icons being recorded; a flow helper's backup holds no icon, so its restore does not set one",
601
+ description="Material Design Icon (e.g., 'mdi:bell'); '' or ' ' clears it, except a zone's stored icon, which Home Assistant keeps on update as the zone dialog does: it can be changed but not removed. A storage helper's icon goes into its stored config when Home Assistant's schema for the type has an icon field, as the helper's own dialog stores it, and the entity registry is left alone; otherwise (person, tag, or another type without the ha_mcp_tools component) it goes into the entity registry. An icon override in the entity registry is set or cleared with ha_set_entity. Restoring a storage helper's automatic backup also puts back its registry icon, unless the backup predates registry icons being recorded; a flow helper's backup holds no icon, so its restore does not set one",
602
602
  default=None,
603
603
  ),
604
604
  ] = None,
@@ -15,6 +15,7 @@ from ha_mcp._vendor.fastmcp.tools import tool
15
15
 
16
16
  from ..backup_helper_target import stored_target
17
17
  from ..client.rest_client import (
18
+ _NO_ANSWER_ERRORS,
18
19
  HomeAssistantAPIError,
19
20
  HomeAssistantAuthError,
20
21
  HomeAssistantCommandError,
@@ -45,6 +46,9 @@ from .ws_waiters import wait_for_entity_removed
45
46
 
46
47
  logger = logging.getLogger(__name__)
47
48
 
49
+ # The zone state attributes that say who is in the zone.
50
+ _OCCUPANCY_ATTRS = ("persons", "device_trackers")
51
+
48
52
 
49
53
  def _build_zone_result(
50
54
  zones: list[dict[str, Any]], zone_id: str | None, gaps: list[str] | None = None
@@ -133,17 +137,33 @@ def _shape_component_zone_record(rec: dict[str, Any]) -> dict[str, Any]:
133
137
  def _with_registry_icons(
134
138
  rows: list[dict[str, Any]], entries: list[dict[str, Any]]
135
139
  ) -> list[dict[str, Any]]:
136
- """The rows with the icon each zone's entity shows: its registry icon, where
137
- the zone tools keep a new zone's icon (#2643), over the stored one."""
140
+ """The rows with each zone entity's registry icon override as
141
+ ``entity_icon``, beside the stored ``icon`` the Zones editor shows: the
142
+ override is what the map and the zone's state show (#3001)."""
138
143
  icons = {e.get("entity_id"): e["icon"] for e in entries if e.get("icon")}
139
144
  return [
140
- {**row, "icon": icons[row["entity_id"]]}
145
+ {**row, "entity_icon": icons[row["entity_id"]]}
141
146
  if row.get("entity_id") in icons
142
147
  else row
143
148
  for row in rows
144
149
  ]
145
150
 
146
151
 
152
+ def _with_occupancy(
153
+ rows: list[dict[str, Any]], states: list[dict[str, Any]]
154
+ ) -> list[dict[str, Any]]:
155
+ """The rows with who is in each zone, from the zone entity's state: Core
156
+ puts it there for every zone, stored or not, as the Map panel shows it."""
157
+ occupancy = {
158
+ s.get("entity_id"): {
159
+ key: attrs[key] for key in _OCCUPANCY_ATTRS if key in attrs
160
+ }
161
+ for s in states
162
+ if isinstance(s, dict) and isinstance(attrs := s.get("attributes"), dict)
163
+ }
164
+ return [{**row, **occupancy.get(row.get("entity_id"), {})} for row in rows]
165
+
166
+
147
167
  def _shape_component_zone_rows(result: dict[str, Any]) -> list[dict[str, Any]]:
148
168
  """Reshape the component's zone ``helpers_list`` result into legacy rows."""
149
169
  raw = result.get("helpers")
@@ -191,6 +211,11 @@ class ZoneTools:
191
211
  settings) and YAML zones, are listed with ``editable=false`` /
192
212
  ``source="yaml"``; editable means ha_set_zone and ha_remove_zone can
193
213
  change the zone. Each zone carries its entity_id.
214
+
215
+ A stored zone's ``icon`` is the one stored in the zone, which the
216
+ Zones editor shows. ``entity_icon`` is an icon override in the zone
217
+ entity's registry entry: the map and the zone's state show it instead.
218
+ Set or clear the override with ha_set_entity.
194
219
  """
195
220
  try:
196
221
  # Prefer the ha_mcp_tools component's helpers_list, one call for
@@ -284,26 +309,69 @@ class ZoneTools:
284
309
  entries, registry_error = await self._zone_registry()
285
310
  except HomeAssistantConnectionError as exc:
286
311
  entries, registry_error = [], str(exc)
287
- # The listing is complete without the registry; only its icons are missing.
288
- response = _build_zone_result(_with_registry_icons(rows, entries), zone_id)
312
+ states_error = None
313
+ try:
314
+ states = await self._zone_states(
315
+ [row["entity_id"] for row in rows if row.get("entity_id")]
316
+ )
317
+ except (HomeAssistantAPIError, HomeAssistantConnectionError) as exc:
318
+ states, states_error = [], str(exc)
319
+ # The listing is complete without the registry and the states; only
320
+ # their icons and persons are missing.
321
+ rows = _with_occupancy(_with_registry_icons(rows, entries), states)
322
+ response = _build_zone_result(rows, zone_id)
289
323
  if registry_error:
290
324
  response.setdefault("warnings", []).append(
291
325
  f"Icons set in the entity registry are missing: {registry_error}"
292
326
  )
327
+ if states_error:
328
+ response.setdefault("warnings", []).append(
329
+ f"Who is in each zone (persons) is missing: {states_error}"
330
+ )
293
331
  return response
294
332
 
295
- async def _send_component_zone_list(self) -> dict[str, Any]:
296
- """Send one ``ha_mcp_tools/helpers_list`` zone query over the per-client WS."""
297
- ws = await get_websocket_client(
333
+ async def _component_ws(self) -> Any:
334
+ """The per-client WebSocket the component commands go over."""
335
+ return await get_websocket_client(
298
336
  url=self._client.base_url,
299
337
  token=self._client.token,
300
338
  verify_ssl=getattr(self._client, "verify_ssl", None),
301
339
  )
302
- return await ws.send_command(
340
+
341
+ async def _send_component_zone_list(self) -> dict[str, Any]:
342
+ """Send one ``ha_mcp_tools/helpers_list`` zone query over the per-client WS."""
343
+ ws = await self._component_ws()
344
+ result: dict[str, Any] = await ws.send_command(
303
345
  "ha_mcp_tools/helpers_list",
304
346
  helper_types=["zone"],
305
347
  include_flow_helpers=False,
306
348
  )
349
+ return result
350
+
351
+ async def _zone_states(self, entity_ids: list[str]) -> list[dict[str, Any]]:
352
+ """The zones' states through the component's targeted read, or every
353
+ state when the component has no ``states`` command or it fails."""
354
+ caps = await get_component_caps(self._client)
355
+ if component_supports(caps, "states"):
356
+ try:
357
+ ws = await self._component_ws()
358
+ raw = await ws.send_command(
359
+ "ha_mcp_tools/states", entity_ids=entity_ids
360
+ )
361
+ found = (raw.get("result") or {}).get("states")
362
+ if isinstance(found, dict):
363
+ return list(found.values())
364
+ logger.warning("ha_mcp_tools/states returned a malformed payload")
365
+ # A raw socket reset reaches here unwrapped (send_command keeps
366
+ # writes at-most-once), and every state is still readable.
367
+ except (HomeAssistantCommandError, *_NO_ANSWER_ERRORS) as exc:
368
+ if is_unknown_command(exc):
369
+ invalidate_caps(self._client)
370
+ logger.warning(
371
+ "ha_mcp_tools/states failed; reading all states: %r", exc
372
+ )
373
+ states: list[dict[str, Any]] = await self._client.get_states()
374
+ return states
307
375
 
308
376
  async def _legacy_zone_result(self, zone_id: str | None) -> dict[str, Any]:
309
377
  """Serve ha_get_zone from Core's own commands."""
@@ -314,9 +382,9 @@ class ZoneTools:
314
382
  """Storage zones from Core's ``zone/list``, then every other zone state.
315
383
 
316
384
  A storage row is the stored body with its registry icon; the home
317
- zone's and YAML zones' rows are their state attributes
318
- (``friendly_name`` also as ``name``, plus ``persons`` and
319
- ``device_trackers``). Every row carries ``entity_id``,
385
+ zone's and YAML zones' rows are their state attributes, with
386
+ ``friendly_name`` as ``name``. Every row carries who is in the zone
387
+ (``persons``, ``device_trackers``) from its state, ``entity_id``,
320
388
  ``editable`` and ``source``, like the component's. The registry links a
321
389
  storage zone to its entity (its ``unique_id`` is the zone_id); a zone
322
390
  state without such an entry is not stored. Returns the rows and the
@@ -354,19 +422,22 @@ class ZoneTools:
354
422
  states = await self._client.get_states()
355
423
  except (HomeAssistantAPIError, HomeAssistantConnectionError) as exc:
356
424
  return rows, [
357
- f"Zones outside the zone storage such as 'home' are missing: {exc}"
425
+ "Zones outside the zone storage such as 'home', and who is in "
426
+ f"each zone, are missing: {exc}"
358
427
  ]
428
+ rows = _with_occupancy(rows, states)
359
429
  stored = set(entity_ids.values())
360
430
  for state in states:
361
431
  entity_id = state.get("entity_id", "") if isinstance(state, dict) else ""
362
432
  if not entity_id.startswith("zone.") or entity_id in stored:
363
433
  continue
364
- attrs = state.get("attributes") or {}
434
+ attrs = dict(state.get("attributes") or {})
365
435
  object_id = entity_id.split(".", 1)[1]
436
+ name = attrs.pop("friendly_name", object_id)
366
437
  rows.append(
367
438
  {
368
439
  **attrs,
369
- "name": attrs.get("friendly_name", object_id),
440
+ "name": name,
370
441
  "id": object_id,
371
442
  "entity_id": entity_id,
372
443
  "editable": False,
@@ -410,17 +481,16 @@ class ZoneTools:
410
481
  )
411
482
  return state
412
483
 
413
- async def _resolve_zone(self, zone_id: str) -> tuple[str | None, str, str | None]:
414
- """The entity_id, storage zone_id and registry icon of a stored zone,
415
- given its entity_id or zone_id.
484
+ async def _resolve_zone(self, zone_id: str) -> tuple[str | None, str]:
485
+ """The entity_id and storage zone_id of a stored zone, given its
486
+ entity_id or zone_id.
416
487
 
417
488
  Resolved as ``stored_target`` resolves it, and so as the zone backups
418
489
  do: a bare ``zone_id`` is a storage id from ``zone/list``, and
419
490
  ``zone.<name>`` is the zone whose registry entry has that entity_id. A
420
491
  renamed entity can carry another zone's id as its name, so a bare id
421
492
  never names an entity, and a repeated removal deletes nothing.
422
- Both entity_id and icon are None for a stored zone without a registry
423
- entry; the icon is also None when the entry sets none. The
493
+ The entity_id is None for a stored zone without a registry entry. The
424
494
  home zone and YAML zones are not in the storage; Core gives them no
425
495
  ``unique_id``, so they have no registry entry.
426
496
  """
@@ -446,11 +516,7 @@ class ZoneTools:
446
516
  stored = {str(zone.get("id")) for zone in listed.get("result") or []}
447
517
  storage_id, entity = stored_target("zone", zone_id, stored, entries)
448
518
  if storage_id in stored:
449
- icon = next(
450
- (e.get("icon") for e in entries if e.get("unique_id") == storage_id),
451
- None,
452
- )
453
- return entity, storage_id, icon
519
+ return entity, storage_id
454
520
  entity_id = zone_id if zone_id.startswith("zone.") else f"zone.{zone_id}"
455
521
  # A registry entry links a stored zone, so only a state without one is
456
522
  # a YAML or the home zone.
@@ -533,7 +599,7 @@ class ZoneTools:
533
599
  icon: Annotated[
534
600
  str | None,
535
601
  Field(
536
- description="Material Design Icon (e.g., 'mdi:briefcase'). On update, '' clears it, except an icon stored in the zone itself (as the Home Assistant UI stores it; ha_get_zone shows it), which cannot be removed",
602
+ description="Material Design Icon (e.g., 'mdi:briefcase'), stored in the zone as the Home Assistant zone dialog stores it. Home Assistant keeps a zone's stored icon on update: it can be changed but not removed, so '' leaves it. An icon override in the entity registry (ha_get_zone's entity_icon) is set or cleared with ha_set_entity",
537
603
  default=None,
538
604
  ),
539
605
  ] = None,
@@ -616,10 +682,8 @@ class ZoneTools:
616
682
  context={"zone_id": zone_id},
617
683
  )
618
684
  )
619
- entity_id, storage_id, registry_icon = await self._resolve_zone(zone_id)
620
- # The helper write path merges into the stored zone and keeps a
621
- # new icon in the registry, where it stays clearable, unless the
622
- # zone already stores one (#2643). It takes the storage id first.
685
+ entity_id, storage_id = await self._resolve_zone(zone_id)
686
+ # The helper write path takes the storage id first.
623
687
  result = await _execute_update_simple_helper(
624
688
  self._client,
625
689
  "zone",
@@ -635,20 +699,14 @@ class ZoneTools:
635
699
  fields,
636
700
  )
637
701
  response = _zone_write_response(result, storage_id, "updated")
638
- # The reply holds the stored zone plus the registry fields this
639
- # write set; the entity shows its registry icon over the stored
640
- # one, as ha_get_zone reports it. An icon this write set or
641
- # cleared ('') is already in the reply.
642
- if icon is None and registry_icon:
643
- response["zone_data"]["icon"] = registry_icon
644
702
  response["updated_fields"] = updated
645
703
  return response
646
704
 
647
- if name is None or latitude is None or longitude is None:
705
+ # Core's zone/create names any other missing field itself; the
706
+ # shared create path refuses a missing name in its own tool's terms.
707
+ if name is None:
648
708
  raise_tool_error(
649
- create_validation_error(
650
- "name, latitude, and longitude are required when creating a zone.",
651
- )
709
+ create_validation_error("name is required when creating a zone.")
652
710
  )
653
711
  result = await _execute_create_simple_helper(
654
712
  self._client,
@@ -725,7 +783,7 @@ class ZoneTools:
725
783
  suggestions=["Use ha_get_zone() to find existing zone_ids"],
726
784
  context={"operation": "remove_zone"},
727
785
  )
728
- entity_id, storage_id, _ = await self._resolve_zone(zone_id)
786
+ entity_id, storage_id = await self._resolve_zone(zone_id)
729
787
  result = await self._client.send_websocket_message(
730
788
  {"type": "zone/delete", "zone_id": storage_id}
731
789
  )