ha-mcp-dev 8.5.0.dev2732__tar.gz → 8.5.0.dev2734__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 (735) hide show
  1. {ha_mcp_dev-8.5.0.dev2732/src/ha_mcp_dev.egg-info → ha_mcp_dev-8.5.0.dev2734}/PKG-INFO +1 -1
  2. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/pyproject.toml +1 -1
  3. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_config_automations.py +371 -19
  4. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_entities.py +48 -20
  5. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/util_helpers.py +53 -1
  6. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734/src/ha_mcp_dev.egg-info}/PKG-INFO +1 -1
  7. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/LICENSE +0 -0
  8. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/MANIFEST.in +0 -0
  9. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/README.md +0 -0
  10. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/setup.cfg +0 -0
  11. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/__init__.py +0 -0
  12. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/__main__.py +0 -0
  13. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_pypi_marker +0 -0
  14. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_rich_compat.py +0 -0
  15. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/__init__.py +0 -0
  16. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
  17. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
  18. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
  19. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
  20. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
  21. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
  22. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
  23. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
  24. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
  25. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
  26. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
  27. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
  28. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
  29. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
  30. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
  31. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
  32. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
  33. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
  34. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
  35. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
  36. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
  37. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
  38. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
  39. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
  40. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
  41. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
  42. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
  43. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
  44. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
  45. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
  46. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
  47. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
  48. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
  49. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
  50. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
  51. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
  52. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
  53. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
  54. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
  55. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
  56. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
  57. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
  58. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
  59. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
  60. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
  61. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
  62. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
  63. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
  64. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
  65. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
  66. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
  67. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
  68. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
  69. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
  70. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
  71. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
  72. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
  73. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
  74. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
  75. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
  76. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
  77. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
  78. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
  79. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
  80. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
  81. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
  82. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
  83. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
  84. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
  85. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
  86. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
  87. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
  88. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
  89. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
  90. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
  91. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
  92. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
  93. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
  94. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
  95. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
  96. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
  97. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
  98. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
  99. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
  100. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
  101. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
  102. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
  103. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
  104. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
  105. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
  106. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
  107. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
  108. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
  109. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
  110. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
  111. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
  112. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
  113. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
  114. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
  115. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
  116. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
  117. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
  118. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
  119. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
  120. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
  121. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
  122. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
  123. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
  124. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
  125. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
  126. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
  127. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
  128. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
  129. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
  130. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
  131. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
  132. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
  133. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
  134. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
  135. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
  136. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
  137. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
  138. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
  139. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
  140. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
  141. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
  142. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
  143. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
  144. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
  145. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
  146. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
  147. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
  148. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
  149. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
  150. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
  151. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
  152. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
  153. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
  154. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
  155. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
  156. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
  157. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
  158. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
  159. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
  160. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
  161. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
  162. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
  163. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
  164. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
  165. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
  166. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
  167. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
  168. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
  169. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
  170. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
  171. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
  172. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
  173. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
  174. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
  175. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
  176. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
  177. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
  178. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
  179. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
  180. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
  181. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
  182. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
  183. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
  184. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
  185. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
  186. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
  187. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
  188. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
  189. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
  190. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
  191. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
  192. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
  193. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
  194. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
  195. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
  196. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
  197. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
  198. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
  199. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
  200. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
  201. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
  202. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
  203. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
  204. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
  205. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
  206. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
  207. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
  208. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
  209. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
  210. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
  211. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
  212. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
  213. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
  214. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
  215. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
  216. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
  217. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
  218. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
  219. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
  220. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
  221. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
  222. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
  223. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
  224. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
  225. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
  226. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
  227. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
  228. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
  229. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
  230. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
  231. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
  232. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
  233. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
  234. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
  235. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
  236. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
  237. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
  238. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
  239. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
  240. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
  241. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
  242. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
  243. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
  244. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
  245. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
  246. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
  247. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
  248. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
  249. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
  250. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
  251. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
  252. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
  253. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
  254. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
  255. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
  256. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
  257. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
  258. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
  259. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
  260. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
  261. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
  262. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
  263. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
  264. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
  265. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
  266. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
  267. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
  268. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
  269. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
  270. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
  271. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
  272. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
  273. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
  274. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
  275. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
  276. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
  277. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
  278. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
  279. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
  280. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
  281. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
  282. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
  283. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
  284. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
  285. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
  286. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
  287. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
  288. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
  289. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
  290. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
  291. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
  292. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
  293. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
  294. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
  295. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
  296. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
  297. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
  298. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
  299. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
  300. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
  301. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
  302. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
  303. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
  304. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
  305. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
  306. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
  307. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
  308. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
  309. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
  310. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
  311. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
  312. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
  313. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
  314. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
  315. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
  316. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
  317. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
  318. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
  319. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
  320. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
  321. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
  322. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
  323. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
  324. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
  325. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
  326. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
  327. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
  328. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
  329. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
  330. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
  331. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
  332. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
  333. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
  334. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
  335. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
  336. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
  337. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
  338. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
  339. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
  340. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
  341. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
  342. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
  343. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
  344. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
  345. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
  346. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
  347. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
  348. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
  349. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
  350. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
  351. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
  352. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
  353. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
  354. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
  355. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
  356. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
  357. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
  358. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
  359. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
  360. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
  361. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
  362. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
  363. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
  364. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
  365. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
  366. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
  367. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
  368. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
  369. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
  370. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
  371. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
  372. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
  373. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
  374. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
  375. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
  376. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
  377. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
  378. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
  379. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
  380. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
  381. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
  382. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
  383. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
  384. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
  385. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
  386. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
  387. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
  388. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
  389. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
  390. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
  391. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
  392. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
  393. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
  394. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
  395. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
  396. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
  397. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
  398. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
  399. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
  400. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
  401. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
  402. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
  403. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
  404. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
  405. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
  406. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
  407. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
  408. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
  409. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
  410. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
  411. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
  412. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
  413. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
  414. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
  415. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
  416. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
  417. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
  418. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
  419. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
  420. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
  421. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
  422. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
  423. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
  424. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
  425. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
  426. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/requirements.txt +0 -0
  427. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
  428. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
  429. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
  430. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
  431. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
  432. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
  433. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
  434. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
  435. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
  436. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
  437. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
  438. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
  439. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
  440. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/client.py +0 -0
  441. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
  442. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
  443. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
  444. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
  445. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
  446. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
  447. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
  448. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
  449. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
  450. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
  451. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
  452. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
  453. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
  454. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
  455. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
  456. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
  457. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
  458. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
  459. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
  460. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
  461. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
  462. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
  463. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/server.py +0 -0
  464. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
  465. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
  466. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
  467. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
  468. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
  469. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
  470. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
  471. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
  472. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
  473. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
  474. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
  475. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
  476. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
  477. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
  478. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
  479. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
  480. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
  481. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
  482. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/version.py +0 -0
  483. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_version.py +0 -0
  484. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/auth/__init__.py +0 -0
  485. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/auth/consent_form.py +0 -0
  486. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/auth/oidc_compat.py +0 -0
  487. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/auth/provider.py +0 -0
  488. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/backup_manager.py +0 -0
  489. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/browser_landing.py +0 -0
  490. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/client/__init__.py +0 -0
  491. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/client/rest_client.py +0 -0
  492. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/client/supervisor_client.py +0 -0
  493. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/client/websocket_client.py +0 -0
  494. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/client/websocket_listener.py +0 -0
  495. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/config.py +0 -0
  496. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
  497. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
  498. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
  499. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
  500. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
  501. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
  502. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/errors.py +0 -0
  503. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/ha_request_queue.py +0 -0
  504. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/hacs_auto_refresh.py +0 -0
  505. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/http_transport.py +0 -0
  506. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/llm_exposure.py +0 -0
  507. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/log_filters.py +0 -0
  508. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/policy/__init__.py +0 -0
  509. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/policy/approval_queue.py +0 -0
  510. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/policy/decision_pin.py +0 -0
  511. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/policy/decisions.py +0 -0
  512. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/policy/editing.py +0 -0
  513. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/policy/evaluator.py +0 -0
  514. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/policy/events.py +0 -0
  515. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/policy/handlers.py +0 -0
  516. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/policy/middleware.py +0 -0
  517. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/policy/model.py +0 -0
  518. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/policy/persistence.py +0 -0
  519. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/policy/value_sources.py +0 -0
  520. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/py.typed +0 -0
  521. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/read_only.py +0 -0
  522. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/redaction.py +0 -0
  523. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/renamed_tools.py +0 -0
  524. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
  525. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
  526. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
  527. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
  528. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/.github/pull_request_template.md +0 -0
  529. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
  530. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
  531. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
  532. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  533. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
  534. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/evals/area-target-over-entity-list/case.yaml +0 -0
  535. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/evals/arrive-home-automation/case.yaml +0 -0
  536. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/evals/assist-shortcut-card/case.yaml +0 -0
  537. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/evals/avg-temperature/case.yaml +0 -0
  538. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/evals/backup-deletion-confirmation/case.yaml +0 -0
  539. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/evals/blueprint-authoring/case.yaml +0 -0
  540. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/evals/button-event-entity/case.yaml +0 -0
  541. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/evals/device-id-trigger-migration/case.yaml +0 -0
  542. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/evals/helper-flow-fields-not-platform-yaml/case.yaml +0 -0
  543. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/evals/media-player-song/case.yaml +0 -0
  544. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/evals/motion-light-automation-mode/case.yaml +0 -0
  545. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/evals/rename-entity-impact-analysis/case.yaml +0 -0
  546. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/evals/template-attributes-yaml-exception/case.yaml +0 -0
  547. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/evals/timer-finished-automation/case.yaml +0 -0
  548. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/evals/vacuum-last-clean/case.yaml +0 -0
  549. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/scripts/check_eval_cases.py +0 -0
  550. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  551. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
  552. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
  553. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
  554. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
  555. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  556. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  557. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  558. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  559. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  560. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  561. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  562. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
  563. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  564. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
  565. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/server.py +0 -0
  566. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/__init__.py +0 -0
  567. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
  568. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
  569. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
  570. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
  571. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
  572. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
  573. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/_i18n.py +0 -0
  574. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
  575. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/_persistence.py +0 -0
  576. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
  577. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/_theme.py +0 -0
  578. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
  579. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/locales/README.md +0 -0
  580. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/locales/az.json +0 -0
  581. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
  582. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/locales/de.json +0 -0
  583. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/locales/en.json +0 -0
  584. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
  585. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/locales/es.json +0 -0
  586. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
  587. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/locales/it.json +0 -0
  588. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
  589. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
  590. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
  591. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
  592. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
  593. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
  594. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
  595. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
  596. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/settings.css +0 -0
  597. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/settings.html +0 -0
  598. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/settings.js +0 -0
  599. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/smoke_test.py +0 -0
  600. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  601. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/strict_bps.py +0 -0
  602. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tool_dispatch.py +0 -0
  603. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/__init__.py +0 -0
  604. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/auto_backup.py +0 -0
  605. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/backup.py +0 -0
  606. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  607. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/best_practice_result.py +0 -0
  608. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/best_practice_variables.py +0 -0
  609. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/blueprint_sources.py +0 -0
  610. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
  611. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/blueprint_write.py +0 -0
  612. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/bulk_selector.py +0 -0
  613. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/component_api.py +0 -0
  614. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/component_config_entries.py +0 -0
  615. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/component_config_reads.py +0 -0
  616. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
  617. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/component_devices.py +0 -0
  618. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/component_registries.py +0 -0
  619. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
  620. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/config_entry_flow.py +0 -0
  621. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
  622. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
  623. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
  624. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/config_entry_identity.py +0 -0
  625. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
  626. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
  627. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
  628. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/device_control.py +0 -0
  629. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/entity_registration.py +0 -0
  630. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/error_log_parsing.py +0 -0
  631. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/hacs_registration.py +0 -0
  632. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/helpers.py +0 -0
  633. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
  634. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/log_common.py +0 -0
  635. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/log_sources.py +0 -0
  636. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/log_sources_fault.py +0 -0
  637. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
  638. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/radio/__init__.py +0 -0
  639. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/radio/base.py +0 -0
  640. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/radio/matter.py +0 -0
  641. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/radio/thread.py +0 -0
  642. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/radio/zigbee.py +0 -0
  643. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/radio/zwave.py +0 -0
  644. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/reference_validator.py +0 -0
  645. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/registry.py +0 -0
  646. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
  647. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/scene_discovery.py +0 -0
  648. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  649. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  650. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  651. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
  652. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  653. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  654. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
  655. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  656. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  657. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  658. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
  659. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_addons.py +0 -0
  660. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_areas.py +0 -0
  661. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
  662. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  663. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  664. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_calendar.py +0 -0
  665. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_camera.py +0 -0
  666. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_categories.py +0 -0
  667. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_code.py +0 -0
  668. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
  669. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  670. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
  671. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
  672. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
  673. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_dev.py +0 -0
  674. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_energy.py +0 -0
  675. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  676. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_groups.py +0 -0
  677. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_hacs.py +0 -0
  678. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_history.py +0 -0
  679. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_integrations.py +0 -0
  680. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_labels.py +0 -0
  681. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_logs.py +0 -0
  682. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_radio.py +0 -0
  683. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_registry.py +0 -0
  684. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_resources.py +0 -0
  685. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_search.py +0 -0
  686. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_security_policy.py +0 -0
  687. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_service.py +0 -0
  688. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_services.py +0 -0
  689. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_system.py +0 -0
  690. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_themes.py +0 -0
  691. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_todo.py +0 -0
  692. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_traces.py +0 -0
  693. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_updates.py +0 -0
  694. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_utility.py +0 -0
  695. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  696. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  697. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
  698. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_zones.py +0 -0
  699. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/validation_middleware.py +0 -0
  700. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/transforms/__init__.py +0 -0
  701. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/transforms/categorized_search.py +0 -0
  702. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/transforms/component_search.py +0 -0
  703. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  704. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/transforms/write_tool_note.py +0 -0
  705. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/transport_security.py +0 -0
  706. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/update_check.py +0 -0
  707. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/utils/__init__.py +0 -0
  708. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/utils/config_hash.py +0 -0
  709. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/utils/config_write_lock.py +0 -0
  710. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/utils/dashboard_patch.py +0 -0
  711. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/utils/data_paths.py +0 -0
  712. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
  713. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/utils/domain_handlers.py +0 -0
  714. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/utils/entity_membership.py +0 -0
  715. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  716. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  717. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/utils/mcp_client_host.py +0 -0
  718. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/utils/operation_manager.py +0 -0
  719. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/utils/python_sandbox.py +0 -0
  720. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/utils/registry_update_lock.py +0 -0
  721. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/utils/skill_loader.py +0 -0
  722. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/utils/usage_logger.py +0 -0
  723. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/visibility/__init__.py +0 -0
  724. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/visibility/enforcement.py +0 -0
  725. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/visibility/model.py +0 -0
  726. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/visibility/persistence.py +0 -0
  727. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/visibility/resolver.py +0 -0
  728. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp_dev.egg-info/SOURCES.txt +0 -0
  729. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
  730. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
  731. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
  732. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
  733. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/tests/__init__.py +0 -0
  734. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/tests/test_constants.py +0 -0
  735. {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/tests/test_env_manager.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ha-mcp-dev
3
- Version: 8.5.0.dev2732
3
+ Version: 8.5.0.dev2734
4
4
  Summary: Home Assistant MCP Server - Complete control of Home Assistant through MCP
5
5
  Author-email: Julien <github@qc-h.net>
6
6
  License: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "8.5.0.dev2732"
7
+ version = "8.5.0.dev2734"
8
8
  description = "Home Assistant MCP Server - Complete control of Home Assistant through MCP"
9
9
  readme = "README.md"
10
10
  # Upper bound widened to <3.15 so the package installs on Home Assistant's
@@ -6,7 +6,7 @@ Home Assistant automation configurations.
6
6
  """
7
7
 
8
8
  import logging
9
- from typing import Annotated, Any, cast
9
+ from typing import Annotated, Any, NoReturn, cast
10
10
 
11
11
  from pydantic import Field
12
12
 
@@ -60,12 +60,15 @@ from .util_helpers import (
60
60
  attach_skill_content,
61
61
  augment_error_dict_with_skill_content,
62
62
  augment_tool_error_with_skill_content,
63
+ automation_reload_waiter,
63
64
  coerce_to_list,
64
65
  fetch_entity_category,
65
66
  merge_validation_meta,
66
67
  parse_json_param,
68
+ wait_for_automation_entity_by_unique_id,
67
69
  wait_for_entity_registered,
68
70
  wait_for_entity_removed,
71
+ wait_for_state_change,
69
72
  )
70
73
 
71
74
  logger = logging.getLogger(__name__)
@@ -320,6 +323,117 @@ def _detect_conflicting_root_keys(config: Any) -> list[str]:
320
323
  return warnings
321
324
 
322
325
 
326
+ def _validate_automation_identifier(identifier: str | None) -> None:
327
+ """Validate an optional automation identifier before dispatch."""
328
+ if identifier is not None:
329
+ validate_identifier_not_empty(
330
+ identifier,
331
+ "identifier",
332
+ suggestions=[
333
+ "Omit identifier to create a new automation",
334
+ "Or pass a valid automation entity_id / unique_id to update",
335
+ ],
336
+ context={"action": "set"},
337
+ )
338
+
339
+
340
+ def _skip_automation_runtime_backup(kwargs: dict[str, Any]) -> bool:
341
+ """Skip config snapshots for runtime-only enabled changes."""
342
+ return (
343
+ kwargs.get("enabled") is not None
344
+ and kwargs.get("config") is None
345
+ and kwargs.get("python_transform") is None
346
+ and not kwargs.get("take_control_of_blueprint")
347
+ )
348
+
349
+
350
+ async def _resolve_post_write_automation_entity(
351
+ client: Any,
352
+ identifier: str | None,
353
+ entity_id: str | None,
354
+ wait: bool,
355
+ response: dict[str, Any],
356
+ ) -> str | None:
357
+ """Resolve a raw unique ID after a write when registration may lag."""
358
+ if (
359
+ wait
360
+ and not entity_id
361
+ and identifier
362
+ and not identifier.startswith("automation.")
363
+ ):
364
+ try:
365
+ return await wait_for_automation_entity_by_unique_id(client, identifier)
366
+ except (HomeAssistantConnectionError, HomeAssistantAuthError) as e:
367
+ response.setdefault("warnings", []).append(
368
+ f"Automation registration verification failed: {e}"
369
+ )
370
+ return entity_id
371
+
372
+
373
+ async def _resolve_enabled_target(
374
+ client: Any, identifier: str, response: dict[str, Any]
375
+ ) -> str | None:
376
+ """Resolve the entity to receive a runtime enabled-state change."""
377
+ if identifier.startswith("automation."):
378
+ return identifier
379
+ # A config write reloads the automation and replaces its entity when the
380
+ # config changed (or creates it), so poll even when the caller passed
381
+ # wait=False.
382
+ return await _resolve_post_write_automation_entity(
383
+ client, identifier, None, True, response
384
+ )
385
+
386
+
387
+ def _note_reload_outcome(
388
+ result: dict[str, Any], reloaded: bool | None, enabled: bool | None
389
+ ) -> None:
390
+ """Warn when an enabled change could not be ordered after the reload."""
391
+ if enabled is None or reloaded:
392
+ return
393
+ reason = (
394
+ "did not confirm the automation reload"
395
+ if reloaded is False
396
+ else "could not be watched for the automation reload (no WebSocket)"
397
+ )
398
+ result.setdefault("warnings", []).append(
399
+ f"Home Assistant {reason}; the requested enabled state may be "
400
+ "reverted when the reload completes."
401
+ )
402
+
403
+
404
+ def _sync_post_write_automation_result(
405
+ response: dict[str, Any], entity_id: str | None
406
+ ) -> None:
407
+ """Record a successfully resolved entity and clear stale poll state."""
408
+ if entity_id:
409
+ response["entity_id"] = entity_id
410
+ response.pop("entity_not_verified", None)
411
+
412
+
413
+ def _reject_enabled_in_config(config: Any) -> None:
414
+ """Reject the runtime-only ``enabled`` key in a stored config body."""
415
+ if isinstance(config, dict) and "enabled" in config:
416
+ raise_tool_error(
417
+ create_error_response(
418
+ ErrorCode.VALIDATION_INVALID_PARAMETER,
419
+ "'enabled' is a runtime-only tool parameter, not a valid "
420
+ "automation config key",
421
+ suggestions=[
422
+ "Remove 'enabled' from config and pass enabled=True or False "
423
+ + "to ha_config_set_automation",
424
+ "Use enabled=None to leave the current runtime state unchanged",
425
+ ],
426
+ context={"action": "set", "invalid_key": "enabled"},
427
+ )
428
+ )
429
+
430
+
431
+ async def _set_automation_enabled(client: Any, entity_id: str, enabled: bool) -> Any:
432
+ """Set an automation's runtime enabled state through Home Assistant."""
433
+ service = "turn_on" if enabled else "turn_off"
434
+ return await client.call_service("automation", service, {"entity_id": entity_id})
435
+
436
+
323
437
  def _strip_redundant_identifier_echo(
324
438
  result: dict[str, Any],
325
439
  *,
@@ -399,6 +513,18 @@ class AutomationConfigTools:
399
513
  )
400
514
  return None
401
515
 
516
+ async def _resolve_automation_entity_id_strict(self, identifier: str) -> str | None:
517
+ """Resolve an identifier without hiding transport/authentication errors."""
518
+ states = await self._client.get_states()
519
+ for state in states:
520
+ state_entity_id = state.get("entity_id", "")
521
+ if state_entity_id.startswith("automation.") and (
522
+ state_entity_id == identifier
523
+ or state.get("attributes", {}).get("id") == identifier
524
+ ):
525
+ return str(state_entity_id)
526
+ return None
527
+
402
528
  @tool(
403
529
  name="ha_config_get_automation",
404
530
  tags={"Automations"},
@@ -525,7 +651,11 @@ class AutomationConfigTools:
525
651
  "title": "Create or Update Automation",
526
652
  },
527
653
  )
528
- @with_auto_backup(domain="automation", id_fn=automation_backup_target)
654
+ @with_auto_backup(
655
+ domain="automation",
656
+ id_fn=automation_backup_target,
657
+ skip_fn=_skip_automation_runtime_backup,
658
+ )
529
659
  @log_tool_usage
530
660
  async def ha_config_set_automation(
531
661
  self,
@@ -605,6 +735,19 @@ class AutomationConfigTools:
605
735
  default=True,
606
736
  ),
607
737
  ] = True,
738
+ enabled: Annotated[
739
+ bool | None,
740
+ Field(
741
+ description=(
742
+ "Turn the automation on (True) or off (False) after an optional config "
743
+ "update; None leaves it unchanged. Can be used standalone with identifier "
744
+ "and no config. Not written into the stored config: Home Assistant keeps "
745
+ "the state across restarts, but a config 'initial_state' overrides it "
746
+ "whenever the automation is reloaded or HA starts."
747
+ ),
748
+ default=None,
749
+ ),
750
+ ] = None,
608
751
  MandatoryBPS: Annotated[
609
752
  bool,
610
753
  Field(default=True),
@@ -660,13 +803,17 @@ class AutomationConfigTools:
660
803
  -> ha_config_set_helper(helper_type='counter' | 'timer' | ...)
661
804
 
662
805
  Supports three modes: full config replacement, Python transformation,
663
- or take_control_of_blueprint (see below).
806
+ or take_control_of_blueprint (see below). Any of them can also take
807
+ `enabled`, which can be passed alone with `identifier` to turn an
808
+ automation on or off without touching its config.
664
809
 
665
810
  WHEN TO USE WHICH MODE:
666
811
  - python_transform: RECOMMENDED for edits to existing automations. Surgical updates.
667
812
  - config: Use for creating new automations or full restructures.
668
813
  - take_control_of_blueprint: converts a blueprint-backed automation
669
814
  into a standalone one. Takes no config of its own.
815
+ - enabled (with identifier, no config): turn an automation off or back
816
+ on, e.g. ha_config_set_automation(identifier="automation.x", enabled=False).
670
817
 
671
818
  IMPORTANT: python_transform requires 'identifier' and 'config_hash' from ha_config_get_automation().
672
819
 
@@ -840,16 +987,7 @@ class AutomationConfigTools:
840
987
  # from the downstream lookup. The ``not identifier`` check
841
988
  # further down the python_transform branch still handles the
842
989
  # explicit ``identifier is None`` case for that mode.
843
- if identifier is not None:
844
- validate_identifier_not_empty(
845
- identifier,
846
- "identifier",
847
- suggestions=[
848
- "Omit identifier to create a new automation",
849
- "Or pass a valid automation entity_id / unique_id to update",
850
- ],
851
- context={"action": "set"},
852
- )
990
+ _validate_automation_identifier(identifier)
853
991
  validate_write_modes(
854
992
  "automation",
855
993
  "identifier",
@@ -871,6 +1009,23 @@ class AutomationConfigTools:
871
1009
  # wins, so it can still lock against a config it read itself.
872
1010
  config_hash = config_hash or taken.config_hash
873
1011
 
1012
+ enabled_only_response = await self._maybe_set_enabled_only(
1013
+ identifier,
1014
+ config,
1015
+ python_transform,
1016
+ category,
1017
+ enabled,
1018
+ wait,
1019
+ )
1020
+ if enabled_only_response is not None:
1021
+ attach_skill_content(
1022
+ enabled_only_response,
1023
+ MandatoryBPS=MandatoryBPS,
1024
+ canonical_files=_AUTOMATION_SKILL_FILES,
1025
+ referenced_files=bp_warnings.referenced_files,
1026
+ )
1027
+ return enabled_only_response
1028
+
874
1029
  if python_transform is not None:
875
1030
  response, bp_warnings = await self._run_python_transform(
876
1031
  identifier,
@@ -878,6 +1033,8 @@ class AutomationConfigTools:
878
1033
  python_transform,
879
1034
  category,
880
1035
  MandatoryBPS,
1036
+ enabled,
1037
+ wait,
881
1038
  )
882
1039
  return response
883
1040
 
@@ -895,6 +1052,7 @@ class AutomationConfigTools:
895
1052
  )
896
1053
 
897
1054
  config_dict = self._parse_and_validate_config(config)
1055
+ _reject_enabled_in_config(config_dict)
898
1056
 
899
1057
  # Extract category before sending to HA REST API (which rejects unknown keys).
900
1058
  # Parameter takes precedence over config dict value.
@@ -950,6 +1108,7 @@ class AutomationConfigTools:
950
1108
  conflict_warnings,
951
1109
  resolved_id,
952
1110
  detached_blueprint,
1111
+ enabled,
953
1112
  )
954
1113
 
955
1114
  except ToolError as te:
@@ -1078,6 +1237,156 @@ class AutomationConfigTools:
1078
1237
  )
1079
1238
  return TakenControl(taken, blueprint_path, fetched_hash)
1080
1239
 
1240
+ async def _maybe_set_enabled_only(
1241
+ self,
1242
+ identifier: str | None,
1243
+ config: Any,
1244
+ python_transform: str | None,
1245
+ category: str | None,
1246
+ enabled: bool | None,
1247
+ wait: bool,
1248
+ ) -> dict[str, Any] | None:
1249
+ """Handle a standalone runtime state request, if one was supplied."""
1250
+ if enabled is None or config is not None or python_transform is not None:
1251
+ return None
1252
+ if category is not None:
1253
+ raise_tool_error(
1254
+ create_error_response(
1255
+ ErrorCode.VALIDATION_INVALID_PARAMETER,
1256
+ "category requires a config update",
1257
+ suggestions=[
1258
+ "Pass config or python_transform when assigning a category",
1259
+ "Omit category for a standalone enabled state change",
1260
+ ],
1261
+ context={"action": "set_enabled", "category": category},
1262
+ )
1263
+ )
1264
+ return await self._set_enabled_only(identifier, enabled, wait)
1265
+
1266
+ async def _set_enabled_only(
1267
+ self, identifier: str | None, enabled: bool, wait: bool
1268
+ ) -> dict[str, Any]:
1269
+ """Set an existing automation's runtime state without replacing config."""
1270
+ if not identifier:
1271
+ raise_tool_error(
1272
+ create_error_response(
1273
+ ErrorCode.VALIDATION_INVALID_PARAMETER,
1274
+ "identifier is required when setting enabled without config",
1275
+ suggestions=[
1276
+ "Pass an automation entity_id or unique_id",
1277
+ "Use ha_search(domain_filter='automation') to find automations",
1278
+ ],
1279
+ context={"action": "set_enabled", "enabled": enabled},
1280
+ )
1281
+ )
1282
+ entity_id = await self._resolve_automation_entity_id_strict(identifier)
1283
+ if not entity_id:
1284
+ await self._raise_automation_not_found(identifier)
1285
+ response: dict[str, Any] = {
1286
+ "success": True,
1287
+ "action": "set_enabled",
1288
+ "automation_id": entity_id,
1289
+ }
1290
+ await self._apply_enabled_state(
1291
+ response,
1292
+ entity_id,
1293
+ enabled,
1294
+ wait,
1295
+ identifier=identifier,
1296
+ )
1297
+ return response
1298
+
1299
+ async def _apply_enabled_state(
1300
+ self,
1301
+ response: dict[str, Any],
1302
+ entity_id: str | None,
1303
+ enabled: bool | None,
1304
+ wait: bool,
1305
+ *,
1306
+ identifier: str | None = None,
1307
+ ) -> str | None:
1308
+ """Turn the automation on or off without touching its stored config.
1309
+
1310
+ Resolves ``entity_id`` from ``identifier`` when it is None. On the
1311
+ standalone ``set_enabled`` action a service failure raises a ToolError;
1312
+ after a config write it is reported as a partial-success warning, since
1313
+ the write itself already landed. Returns the resolved entity_id.
1314
+ """
1315
+ if enabled is None:
1316
+ return entity_id
1317
+ if entity_id is None and identifier:
1318
+ entity_id = await _resolve_enabled_target(
1319
+ self._client, identifier, response
1320
+ )
1321
+ if entity_id is None:
1322
+ response["enabled_requested"] = enabled
1323
+ response["enabled_applied"] = False
1324
+ retry_id = identifier or response.get("unique_id") or "<automation id>"
1325
+ response.setdefault("warnings", []).append(
1326
+ "Automation was written, but its entity_id could not be resolved; "
1327
+ "the requested enabled state was not applied. Retry with "
1328
+ f"ha_config_set_automation(identifier='{retry_id}', "
1329
+ f"enabled={enabled}) once the automation is loaded."
1330
+ )
1331
+ return None
1332
+ try:
1333
+ await _set_automation_enabled(self._client, entity_id, enabled)
1334
+ except (
1335
+ HomeAssistantAPIError,
1336
+ HomeAssistantAuthError,
1337
+ HomeAssistantConnectionError,
1338
+ ) as exc:
1339
+ if response.get("action") == "set_enabled":
1340
+ exception_to_structured_error(
1341
+ exc,
1342
+ context={
1343
+ "action": "set_enabled",
1344
+ "identifier": identifier,
1345
+ "entity_id": entity_id,
1346
+ "enabled": enabled,
1347
+ },
1348
+ )
1349
+ logger.warning(
1350
+ "Enabled state not applied to %s after config write: %s",
1351
+ entity_id,
1352
+ exc,
1353
+ )
1354
+ response["enabled_requested"] = enabled
1355
+ response["enabled_applied"] = False
1356
+ response.setdefault("warnings", []).append(
1357
+ "Automation config was written, but the requested enabled state "
1358
+ f"could not be applied: {exc}"
1359
+ )
1360
+ return entity_id
1361
+ response["enabled"] = enabled
1362
+ response["enabled_applied"] = True
1363
+ if wait:
1364
+ await self._verify_enabled_state(response, entity_id, enabled)
1365
+ return entity_id
1366
+
1367
+ async def _verify_enabled_state(
1368
+ self, response: dict[str, Any], entity_id: str, enabled: bool
1369
+ ) -> None:
1370
+ """Wait for the automation to report the requested state."""
1371
+ expected_state = "on" if enabled else "off"
1372
+ try:
1373
+ verified = await wait_for_state_change(
1374
+ self._client,
1375
+ entity_id,
1376
+ expected_state=expected_state,
1377
+ )
1378
+ except (HomeAssistantConnectionError, HomeAssistantAuthError) as exc:
1379
+ response.setdefault("warnings", []).append(
1380
+ f"Automation {entity_id} was sent {expected_state}, but state "
1381
+ f"verification failed: {exc}"
1382
+ )
1383
+ return
1384
+ if verified is None:
1385
+ response.setdefault("warnings", []).append(
1386
+ f"Automation {entity_id} was sent {expected_state} but its state "
1387
+ "could not be verified before the timeout."
1388
+ )
1389
+
1081
1390
  async def _run_python_transform(
1082
1391
  self,
1083
1392
  identifier: str | None,
@@ -1085,6 +1394,8 @@ class AutomationConfigTools:
1085
1394
  python_transform: str,
1086
1395
  category: str | None,
1087
1396
  MandatoryBPS: bool,
1397
+ enabled: bool | None,
1398
+ wait: bool,
1088
1399
  ) -> tuple[dict[str, Any], BestPracticeCheckResult]:
1089
1400
  """Execute python_transform mode and return (response, bp_warnings)."""
1090
1401
  if not identifier:
@@ -1130,6 +1441,7 @@ class AutomationConfigTools:
1130
1441
  )
1131
1442
 
1132
1443
  # Pop category before sending to HA REST API (rejects unknown keys)
1444
+ _reject_enabled_in_config(transformed_config)
1133
1445
  transform_category = transformed_config.pop("category", None)
1134
1446
  effective_category = category if category is not None else transform_category
1135
1447
 
@@ -1156,9 +1468,13 @@ class AutomationConfigTools:
1156
1468
  # storage key; thread it so the upsert skips the redundant re-resolve
1157
1469
  # (issue #1813 Phase 0). Fall back to the raw identifier if the fetched
1158
1470
  # body carried no ``id`` (not expected for a real automation).
1159
- result = await self._upsert_automation(
1160
- transformed_config, identifier, resolved_id
1161
- )
1471
+ async with automation_reload_waiter(
1472
+ self._client, enabled=enabled is not None
1473
+ ) as wait_for_reload:
1474
+ result = await self._upsert_automation(
1475
+ transformed_config, identifier, resolved_id
1476
+ )
1477
+ _note_reload_outcome(result, await wait_for_reload(), enabled)
1162
1478
  for warning in conflict_warnings:
1163
1479
  result.setdefault("warnings", []).append(warning)
1164
1480
  refetched = await self._get_automation_config_internal(identifier)
@@ -1177,6 +1493,15 @@ class AutomationConfigTools:
1177
1493
  "automation",
1178
1494
  )
1179
1495
 
1496
+ entity_id = await self._apply_enabled_state(
1497
+ result,
1498
+ entity_id,
1499
+ enabled,
1500
+ wait,
1501
+ identifier=identifier or result.get("unique_id"),
1502
+ )
1503
+ _sync_post_write_automation_result(result, entity_id)
1504
+
1180
1505
  response: dict[str, Any] = {
1181
1506
  "success": True,
1182
1507
  "action": "python_transform",
@@ -1208,6 +1533,7 @@ class AutomationConfigTools:
1208
1533
  conflict_warnings: list[str] | None = None,
1209
1534
  resolved_id: str | None = None,
1210
1535
  detached_blueprint: str | None = None,
1536
+ enabled: bool | None = None,
1211
1537
  ) -> dict[str, Any]:
1212
1538
  """Execute config-replacement mode and return the tool response.
1213
1539
 
@@ -1221,11 +1547,29 @@ class AutomationConfigTools:
1221
1547
  is threaded to the upsert so it skips the redundant
1222
1548
  re-resolve; None falls back to resolving inside the REST client.
1223
1549
  """
1224
- result = await self._upsert_automation(config_dict, identifier, resolved_id)
1550
+ async with automation_reload_waiter(
1551
+ self._client, enabled=enabled is not None
1552
+ ) as wait_for_reload:
1553
+ result = await self._upsert_automation(config_dict, identifier, resolved_id)
1554
+ _note_reload_outcome(result, await wait_for_reload(), enabled)
1225
1555
 
1226
1556
  for warning in conflict_warnings or []:
1227
1557
  result.setdefault("warnings", []).append(warning)
1228
1558
 
1559
+ post_write_identifier = identifier or result.get("unique_id")
1560
+ # A create already polled for the entity inside the upsert; with wait=True
1561
+ # the resolver below polls again. Either way, _apply_enabled_state must
1562
+ # not start a further poll of its own.
1563
+ entity_already_polled = wait or bool(result.get("entity_not_verified"))
1564
+ entity_id = await _resolve_post_write_automation_entity(
1565
+ self._client,
1566
+ post_write_identifier,
1567
+ result.get("entity_id"),
1568
+ wait,
1569
+ result,
1570
+ )
1571
+ _sync_post_write_automation_result(result, entity_id)
1572
+
1229
1573
  if result.get("entity_not_verified"):
1230
1574
  result.setdefault("warnings", []).append(
1231
1575
  f"{NOT_VERIFIED_WARNING_PREFIX} "
@@ -1236,7 +1580,6 @@ class AutomationConfigTools:
1236
1580
  )
1237
1581
  result.pop("entity_not_verified", None)
1238
1582
 
1239
- entity_id = result.get("entity_id")
1240
1583
  if not entity_id and identifier and identifier.startswith("automation."):
1241
1584
  entity_id = identifier
1242
1585
  if wait and entity_id:
@@ -1263,6 +1606,15 @@ class AutomationConfigTools:
1263
1606
  "automation",
1264
1607
  )
1265
1608
 
1609
+ entity_id = await self._apply_enabled_state(
1610
+ result,
1611
+ entity_id,
1612
+ enabled,
1613
+ wait,
1614
+ identifier=None if entity_already_polled else post_write_identifier,
1615
+ )
1616
+ _sync_post_write_automation_result(result, entity_id)
1617
+
1266
1618
  if bp_warnings:
1267
1619
  result["best_practice_warnings"] = list(bp_warnings)
1268
1620
 
@@ -1359,7 +1711,7 @@ class AutomationConfigTools:
1359
1711
  raw_id = current.get("id")
1360
1712
  return str(raw_id) if raw_id is not None else None
1361
1713
 
1362
- async def _raise_automation_not_found(self, identifier: str) -> None:
1714
+ async def _raise_automation_not_found(self, identifier: str) -> NoReturn:
1363
1715
  """Raise a structured RESOURCE_NOT_FOUND ToolError for a missing automation.
1364
1716
 
1365
1717
  Single source of truth for the 404→RESOURCE_NOT_FOUND mapping used
@@ -383,10 +383,11 @@ def _validate_enabled_constraint(
383
383
  Registry-disabling (enabled=False) removes the entity from the HA
384
384
  state machine entirely, making it invisible in the UI and
385
385
  unqueryable via state APIs until re-enabled AND the integration is
386
- reloaded. For automations and scripts the correct way to
387
- "disable" them is via their domain services (automation.turn_off /
388
- script.turn_off) which simply prevent them from running while
389
- keeping them visible and manageable.
386
+ reloaded. For automations, use
387
+ ha_config_set_automation(identifier=..., enabled=...) to control their
388
+ runtime enabled state. For scripts, script.turn_off only stops a
389
+ currently running execution; it does not disable the script, and Home
390
+ Assistant has no script runtime enable/disable service.
390
391
  """
391
392
  if enabled is False:
392
393
  blocked = [
@@ -394,20 +395,41 @@ def _validate_enabled_constraint(
394
395
  ]
395
396
  if blocked:
396
397
  _domain = blocked[0].split(".")[0]
397
- _service_hint = f"{_domain}.turn_off"
398
+ if _domain == "script":
399
+ message = (
400
+ "Cannot registry-disable script entities with "
401
+ "ha_set_entity(enabled=False). This removes the entity from the "
402
+ "state machine and hides it from the UI until it is re-enabled "
403
+ "and scripts are reloaded. Use ha_call_service('script', "
404
+ f"'turn_off', entity_id='{blocked[0]}') only to stop a "
405
+ "currently running execution; it does not disable the script. "
406
+ "Home Assistant has no script runtime enable/disable service."
407
+ )
408
+ suggestions = [
409
+ "Use script.turn_off only to stop a currently running execution; it does not disable the script",
410
+ "Home Assistant has no script runtime enable/disable service",
411
+ ]
412
+ else:
413
+ message = (
414
+ f"Cannot registry-disable {_domain} entities with "
415
+ "ha_set_entity(enabled=False). This removes the entity from the "
416
+ "state machine and hides it from the UI until it is re-enabled "
417
+ f"AND the {_domain}s are reloaded. Use "
418
+ f"ha_config_set_automation(identifier='{blocked[0]}', "
419
+ "enabled=False) instead to disable it without removing it."
420
+ )
421
+ suggestions = [
422
+ "Use ha_config_set_automation(identifier=..., enabled=...) to "
423
+ + "disable the automation (keeps it visible and manageable)",
424
+ "Use ha_config_set_automation(identifier=..., enabled=True) to "
425
+ + "re-enable it later",
426
+ "ha_set_entity(enabled=False) is for registry-level disable — it fully hides the entity",
427
+ ]
398
428
  raise_tool_error(
399
429
  create_error_response(
400
430
  ErrorCode.VALIDATION_INVALID_PARAMETER,
401
- f"Cannot registry-disable {_domain} entities with ha_set_entity(enabled=False). "
402
- f"This removes the entity from the state machine and hides it from the UI "
403
- f"until it is re-enabled AND the {_domain}s are reloaded. "
404
- f"Use ha_call_service('{_domain}', 'turn_off', entity_id='{blocked[0]}') instead "
405
- f"to disable it without removing it.",
406
- suggestions=[
407
- f"Use {_service_hint} to disable the {_domain} (keeps it visible and manageable)",
408
- f"Use {_domain}.turn_on to re-enable it later",
409
- "ha_set_entity(enabled=False) is for registry-level disable — it fully hides the entity",
410
- ],
431
+ message,
432
+ suggestions=suggestions,
411
433
  )
412
434
  )
413
435
 
@@ -1692,8 +1714,11 @@ class EntityTools:
1692
1714
  "WARNING: Setting enabled=False is a registry-level disable — it completely "
1693
1715
  "removes the entity from the state machine and hides it from the UI. "
1694
1716
  "A reload or restart is required to restore it after re-enabling. "
1695
- "NOT allowed for automation or script entities — use automation.turn_off / "
1696
- "script.turn_off via ha_call_service() instead."
1717
+ "NOT allowed for automation or script entities. For automations use "
1718
+ "ha_config_set_automation(identifier=..., enabled=...)"
1719
+ "; script.turn_off only stops "
1720
+ "a currently running execution and does not disable the script. "
1721
+ "Home Assistant has no script runtime enable/disable service."
1697
1722
  ),
1698
1723
  default=None,
1699
1724
  ),
@@ -1866,9 +1891,12 @@ class EntityTools:
1866
1891
  in state queries, dashboards, or automations until re-enabled AND the integration is
1867
1892
  reloaded. This is NOT the same as "turning off" an entity.
1868
1893
 
1869
- For automations and scripts, enabled=False is blocked. Use these instead:
1870
- - ha_call_service("automation", "turn_off", entity_id="automation.xxx")
1871
- - ha_call_service("script", "turn_off", entity_id="script.xxx")
1894
+ For automations and scripts, enabled=False is blocked. For automations,
1895
+ use ha_config_set_automation(identifier="automation.xxx", enabled=False)
1896
+ (or enabled=True to re-enable).
1897
+ For scripts, ha_call_service("script", "turn_off", entity_id="script.xxx")
1898
+ only stops a currently running execution; it does not disable the script.
1899
+ Home Assistant has no script runtime enable/disable service.
1872
1900
  """
1873
1901
  try:
1874
1902
  entity_ids, is_bulk = _parse_set_entity_ids(entity_id)