ha-mcp-dev 8.6.0.dev2934__tar.gz → 8.6.0.dev2941__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 (767) hide show
  1. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/PKG-INFO +1 -1
  2. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/pyproject.toml +1 -1
  3. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/pyproject.toml.orig +1 -1
  4. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/errors.py +6 -1
  5. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/locales/az.json +1 -0
  6. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/locales/cs.json +1 -0
  7. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/locales/de.json +1 -0
  8. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/locales/eo.json +1 -0
  9. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/locales/es.json +1 -0
  10. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/locales/fr.json +1 -0
  11. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/locales/it.json +1 -0
  12. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/locales/ko.json +1 -0
  13. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/locales/nl.json +1 -0
  14. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/locales/pl.json +1 -0
  15. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/locales/ru.json +1 -0
  16. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/locales/sv.json +1 -0
  17. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/locales/zh-Hans.json +1 -0
  18. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/locales/zh-Hant.json +1 -0
  19. ha_mcp_dev-8.6.0.dev2941/src/ha_mcp/tools/config_write_errors.py +185 -0
  20. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_config_automations.py +22 -57
  21. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/validation_middleware.py +93 -9
  22. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/LICENSE +0 -0
  23. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/README.md +0 -0
  24. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/__init__.py +0 -0
  25. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/__main__.py +0 -0
  26. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_pypi_marker +0 -0
  27. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_rich_compat.py +0 -0
  28. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/__init__.py +0 -0
  29. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
  30. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
  31. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
  32. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
  33. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
  34. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
  35. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
  36. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
  37. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
  38. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
  39. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
  40. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
  41. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
  42. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
  43. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
  44. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
  45. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
  46. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
  47. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
  48. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
  49. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
  50. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
  51. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
  52. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
  53. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
  54. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
  55. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
  56. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
  57. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
  58. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
  59. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
  60. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
  61. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
  62. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
  63. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
  64. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
  65. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
  66. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
  67. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
  68. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
  69. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
  70. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
  71. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
  72. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
  73. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
  74. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
  75. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
  76. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
  77. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
  78. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
  79. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
  80. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
  81. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
  82. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
  83. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
  84. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
  85. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
  86. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
  87. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
  88. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
  89. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
  90. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
  91. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
  92. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
  93. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
  94. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
  95. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
  96. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
  97. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
  98. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
  99. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
  100. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
  101. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
  102. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
  103. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
  104. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
  105. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
  106. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
  107. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
  108. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
  109. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
  110. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
  111. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
  112. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
  113. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
  114. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
  115. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
  116. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
  117. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
  118. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
  119. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
  120. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
  121. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
  122. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
  123. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
  124. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
  125. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
  126. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
  127. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
  128. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
  129. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
  130. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
  131. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
  132. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
  133. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
  134. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
  135. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
  136. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
  137. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
  138. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
  139. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
  140. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
  141. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
  142. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
  143. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
  144. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
  145. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
  146. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
  147. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
  148. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
  149. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
  150. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
  151. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
  152. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
  153. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
  154. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
  155. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
  156. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
  157. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
  158. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
  159. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
  160. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
  161. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
  162. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
  163. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
  164. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
  165. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
  166. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
  167. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
  168. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
  169. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
  170. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
  171. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
  172. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
  173. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
  174. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
  175. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
  176. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
  177. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
  178. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
  179. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
  180. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
  181. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
  182. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
  183. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
  184. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
  185. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
  186. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
  187. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
  188. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
  189. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
  190. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
  191. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
  192. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
  193. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
  194. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
  195. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
  196. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
  197. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
  198. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
  199. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
  200. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
  201. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
  202. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
  203. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
  204. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
  205. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
  206. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
  207. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
  208. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
  209. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
  210. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
  211. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
  212. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
  213. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
  214. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
  215. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
  216. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
  217. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
  218. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
  219. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
  220. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
  221. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
  222. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
  223. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
  224. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
  225. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
  226. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
  227. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
  228. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
  229. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
  230. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
  231. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
  232. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
  233. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
  234. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
  235. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
  236. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
  237. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
  238. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
  239. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
  240. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
  241. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
  242. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
  243. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
  244. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
  245. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
  246. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
  247. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
  248. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
  249. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
  250. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
  251. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
  252. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
  253. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
  254. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
  255. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
  256. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
  257. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
  258. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
  259. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
  260. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
  261. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
  262. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
  263. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
  264. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
  265. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
  266. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
  267. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
  268. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
  269. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
  270. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
  271. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
  272. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
  273. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
  274. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
  275. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
  276. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
  277. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
  278. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
  279. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
  280. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
  281. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
  282. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
  283. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
  284. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
  285. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
  286. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
  287. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
  288. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
  289. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
  290. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
  291. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
  292. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
  293. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
  294. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
  295. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
  296. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
  297. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
  298. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
  299. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
  300. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
  301. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
  302. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
  303. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
  304. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
  305. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
  306. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
  307. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
  308. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
  309. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
  310. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
  311. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
  312. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
  313. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
  314. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
  315. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
  316. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
  317. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
  318. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
  319. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
  320. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
  321. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
  322. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
  323. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
  324. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
  325. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
  326. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
  327. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
  328. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
  329. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
  330. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
  331. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
  332. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
  333. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
  334. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
  335. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
  336. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
  337. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
  338. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
  339. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
  340. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
  341. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
  342. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
  343. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
  344. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
  345. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
  346. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
  347. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
  348. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
  349. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
  350. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
  351. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
  352. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
  353. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
  354. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
  355. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
  356. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
  357. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
  358. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
  359. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
  360. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
  361. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
  362. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
  363. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
  364. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
  365. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
  366. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
  367. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
  368. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
  369. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
  370. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
  371. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
  372. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
  373. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
  374. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
  375. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
  376. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
  377. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
  378. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
  379. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
  380. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
  381. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
  382. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
  383. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
  384. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
  385. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
  386. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
  387. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
  388. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
  389. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
  390. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
  391. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
  392. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
  393. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
  394. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
  395. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
  396. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
  397. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
  398. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
  399. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
  400. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
  401. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
  402. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
  403. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
  404. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
  405. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
  406. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
  407. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
  408. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
  409. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
  410. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
  411. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
  412. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
  413. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
  414. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
  415. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
  416. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
  417. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
  418. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
  419. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
  420. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
  421. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
  422. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
  423. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
  424. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
  425. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
  426. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
  427. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
  428. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
  429. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
  430. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
  431. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
  432. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
  433. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
  434. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
  435. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
  436. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
  437. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
  438. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
  439. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/requirements.txt +0 -0
  440. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
  441. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
  442. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
  443. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
  444. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
  445. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
  446. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
  447. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
  448. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
  449. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
  450. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
  451. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
  452. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
  453. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/client.py +0 -0
  454. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
  455. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
  456. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
  457. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
  458. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
  459. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
  460. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
  461. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
  462. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
  463. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
  464. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
  465. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
  466. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
  467. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
  468. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
  469. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
  470. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
  471. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
  472. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
  473. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
  474. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
  475. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
  476. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/server.py +0 -0
  477. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
  478. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
  479. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
  480. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
  481. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
  482. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
  483. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
  484. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
  485. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
  486. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
  487. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
  488. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
  489. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
  490. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
  491. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
  492. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
  493. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
  494. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
  495. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/version.py +0 -0
  496. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_version.py +0 -0
  497. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/app_discovery.py +0 -0
  498. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/auth/__init__.py +0 -0
  499. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/auth/consent_form.py +0 -0
  500. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/auth/oidc_compat.py +0 -0
  501. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/auth/provider.py +0 -0
  502. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/backup_diff.py +0 -0
  503. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/backup_entity_ids.py +0 -0
  504. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/backup_manager.py +0 -0
  505. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/backup_tags.py +0 -0
  506. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/browser_landing.py +0 -0
  507. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/client/__init__.py +0 -0
  508. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/client/admin_routes.py +0 -0
  509. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/client/rest_client.py +0 -0
  510. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/client/supervisor_client.py +0 -0
  511. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/client/websocket_client.py +0 -0
  512. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/client/websocket_listener.py +0 -0
  513. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/config.py +0 -0
  514. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/config_backup.py +0 -0
  515. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/config_meta.py +0 -0
  516. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/config_overrides.py +0 -0
  517. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/config_registry.py +0 -0
  518. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/config_settings.py +0 -0
  519. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
  520. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
  521. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
  522. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
  523. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
  524. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
  525. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/ha_request_queue.py +0 -0
  526. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/hacs_auto_refresh.py +0 -0
  527. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/http_transport.py +0 -0
  528. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/image_info.py +0 -0
  529. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/llm_exposure.py +0 -0
  530. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/log_filters.py +0 -0
  531. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/policy/__init__.py +0 -0
  532. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/policy/approval_queue.py +0 -0
  533. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/policy/decision_pin.py +0 -0
  534. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/policy/decisions.py +0 -0
  535. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/policy/editing.py +0 -0
  536. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/policy/evaluator.py +0 -0
  537. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/policy/events.py +0 -0
  538. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/policy/handlers.py +0 -0
  539. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/policy/middleware.py +0 -0
  540. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/policy/model.py +0 -0
  541. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/policy/mrtr.py +0 -0
  542. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/policy/persistence.py +0 -0
  543. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/policy/server_channels.py +0 -0
  544. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/policy/value_sources.py +0 -0
  545. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/py.typed +0 -0
  546. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/read_only.py +0 -0
  547. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/redaction.py +0 -0
  548. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/renamed_tools.py +0 -0
  549. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  550. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  551. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
  552. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-actions.md +0 -0
  553. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
  554. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
  555. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  556. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  557. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  558. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  559. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  560. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  561. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  562. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
  563. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  564. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/triggers-and-conditions.md +0 -0
  565. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
  566. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/server.py +0 -0
  567. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/server_lifespan.py +0 -0
  568. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/server_tool_text.py +0 -0
  569. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/__init__.py +0 -0
  570. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
  571. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
  572. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
  573. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
  574. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
  575. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
  576. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/_i18n.py +0 -0
  577. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
  578. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/_persistence.py +0 -0
  579. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
  580. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/_theme.py +0 -0
  581. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
  582. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/locales/README.md +0 -0
  583. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/locales/en.json +0 -0
  584. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
  585. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/settings.css +0 -0
  586. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/settings.html +0 -0
  587. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/settings_js/01_i18n_state.js +0 -0
  588. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/settings_js/02_tools_restart.js +0 -0
  589. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/settings_js/03_render_save.js +0 -0
  590. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/settings_js/04_backups.js +0 -0
  591. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/settings_js/05_feature_flags.js +0 -0
  592. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/settings_js/06_policy_cards.js +0 -0
  593. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/settings_js/07_policy_actions.js +0 -0
  594. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/settings_js/08_advanced.js +0 -0
  595. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/settings_js/09_prefs_visibility.js +0 -0
  596. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/smoke_test.py +0 -0
  597. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  598. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/strict_bps.py +0 -0
  599. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tool_dispatch.py +0 -0
  600. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/__init__.py +0 -0
  601. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/area_messages.py +0 -0
  602. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/auto_backup.py +0 -0
  603. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/backup.py +0 -0
  604. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/backup_access.py +0 -0
  605. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/backup_on_demand.py +0 -0
  606. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  607. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/best_practice_result.py +0 -0
  608. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/best_practice_variables.py +0 -0
  609. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/blueprint_sources.py +0 -0
  610. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
  611. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/blueprint_write.py +0 -0
  612. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/bug_report_config.py +0 -0
  613. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/bug_report_templates.py +0 -0
  614. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/bulk_selector.py +0 -0
  615. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/coercion.py +0 -0
  616. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/component_api.py +0 -0
  617. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/component_config_entries.py +0 -0
  618. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/component_config_reads.py +0 -0
  619. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
  620. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/component_devices.py +0 -0
  621. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/component_helper_collections.py +0 -0
  622. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/component_registries.py +0 -0
  623. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
  624. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/config_entry_backup.py +0 -0
  625. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/config_entry_flow.py +0 -0
  626. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
  627. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/config_entry_flow_introspect.py +0 -0
  628. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
  629. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
  630. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/config_entry_identity.py +0 -0
  631. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
  632. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
  633. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/config_helpers/__init__.py +0 -0
  634. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/config_helpers/core_payload.py +0 -0
  635. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/config_helpers/create.py +0 -0
  636. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/config_helpers/describe.py +0 -0
  637. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/config_helpers/flow.py +0 -0
  638. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/config_helpers/listing.py +0 -0
  639. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/config_helpers/registry.py +0 -0
  640. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/config_helpers/schemas.py +0 -0
  641. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/config_helpers/typed_config.py +0 -0
  642. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/config_helpers/update.py +0 -0
  643. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/config_helpers/validation.py +0 -0
  644. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/config_subentry_restore.py +0 -0
  645. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/config_write_helpers.py +0 -0
  646. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
  647. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/dashboard_list_checks.py +0 -0
  648. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/dev_backup.py +0 -0
  649. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/device_control.py +0 -0
  650. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/device_enrichment.py +0 -0
  651. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/diagnostics_helpers.py +0 -0
  652. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/entity_param_parsing.py +0 -0
  653. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/entity_registration.py +0 -0
  654. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/entity_update_fields.py +0 -0
  655. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/error_log_parsing.py +0 -0
  656. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/hacs_registration.py +0 -0
  657. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/helpers.py +0 -0
  658. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
  659. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/log_common.py +0 -0
  660. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/log_sources.py +0 -0
  661. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/log_sources_fault.py +0 -0
  662. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
  663. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/radio/__init__.py +0 -0
  664. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/radio/base.py +0 -0
  665. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/radio/matter.py +0 -0
  666. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/radio/thread.py +0 -0
  667. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/radio/zigbee.py +0 -0
  668. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/radio/zwave.py +0 -0
  669. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/radio/zwave_parameters.py +0 -0
  670. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/reference_validator.py +0 -0
  671. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/registry.py +0 -0
  672. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
  673. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/response_helpers.py +0 -0
  674. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/scene_discovery.py +0 -0
  675. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/search/__init__.py +0 -0
  676. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/search/base.py +0 -0
  677. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/search/component.py +0 -0
  678. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/search/entities.py +0 -0
  679. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/search/legacy.py +0 -0
  680. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/search/modes.py +0 -0
  681. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/search/overview.py +0 -0
  682. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/search/response.py +0 -0
  683. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/search/state.py +0 -0
  684. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  685. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  686. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  687. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
  688. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  689. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  690. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
  691. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  692. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  693. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  694. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tool_hints.py +0 -0
  695. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
  696. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_addons.py +0 -0
  697. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_areas.py +0 -0
  698. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
  699. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  700. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  701. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_calendar.py +0 -0
  702. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_camera.py +0 -0
  703. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_categories.py +0 -0
  704. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_code.py +0 -0
  705. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
  706. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  707. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
  708. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
  709. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
  710. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_dev.py +0 -0
  711. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_energy.py +0 -0
  712. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_entities.py +0 -0
  713. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  714. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_groups.py +0 -0
  715. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_hacs.py +0 -0
  716. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_history.py +0 -0
  717. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_integrations.py +0 -0
  718. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_labels.py +0 -0
  719. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_logs.py +0 -0
  720. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_radio.py +0 -0
  721. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_registry.py +0 -0
  722. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_resources.py +0 -0
  723. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_search.py +0 -0
  724. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_security_policy.py +0 -0
  725. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_service.py +0 -0
  726. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_services.py +0 -0
  727. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_system.py +0 -0
  728. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_themes.py +0 -0
  729. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_todo.py +0 -0
  730. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_traces.py +0 -0
  731. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_updates.py +0 -0
  732. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_utility.py +0 -0
  733. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  734. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  735. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
  736. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_zones.py +0 -0
  737. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/util_helpers.py +0 -0
  738. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/ws_waiters.py +0 -0
  739. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/transforms/__init__.py +0 -0
  740. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/transforms/categorized_search.py +0 -0
  741. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/transforms/component_helpers.py +0 -0
  742. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/transforms/component_search.py +0 -0
  743. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  744. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/transforms/write_tool_note.py +0 -0
  745. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/transport_security.py +0 -0
  746. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/update_check.py +0 -0
  747. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/utils/__init__.py +0 -0
  748. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/utils/config_hash.py +0 -0
  749. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/utils/config_write_lock.py +0 -0
  750. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/utils/dashboard_patch.py +0 -0
  751. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/utils/data_paths.py +0 -0
  752. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
  753. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/utils/domain_handlers.py +0 -0
  754. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/utils/entity_membership.py +0 -0
  755. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  756. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  757. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/utils/mcp_client_host.py +0 -0
  758. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/utils/operation_manager.py +0 -0
  759. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/utils/python_sandbox.py +0 -0
  760. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/utils/registry_update_lock.py +0 -0
  761. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/utils/skill_loader.py +0 -0
  762. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/utils/usage_logger.py +0 -0
  763. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/visibility/__init__.py +0 -0
  764. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/visibility/enforcement.py +0 -0
  765. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/visibility/model.py +0 -0
  766. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/visibility/persistence.py +0 -0
  767. {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/visibility/resolver.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ha-mcp-dev
3
- Version: 8.6.0.dev2934
3
+ Version: 8.6.0.dev2941
4
4
  Summary: Home Assistant MCP Server - Complete control of Home Assistant through MCP
5
5
  Keywords: mcp,home-assistant,ai,automation,smart-home
6
6
  Author: Julien
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "8.6.0.dev2934"
7
+ version = "8.6.0.dev2941"
8
8
  description = "Home Assistant MCP Server - Complete control of Home Assistant through MCP"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13,<3.15"
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "8.6.0.dev2934"
7
+ version = "8.6.0.dev2941"
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
@@ -466,6 +466,7 @@ def create_validation_error(
466
466
  details: str | None = None,
467
467
  invalid_json: bool = False,
468
468
  context: dict[str, Any] | None = None,
469
+ suggestions: list[str] | None = None,
469
470
  ) -> dict[str, Any]:
470
471
  """Create a validation error response."""
471
472
  code = (
@@ -480,7 +481,11 @@ def create_validation_error(
480
481
  if parameter:
481
482
  final_context["parameter"] = parameter
482
483
  return create_error_response(
483
- code, message, details, context=final_context if final_context else None
484
+ code,
485
+ message,
486
+ details,
487
+ suggestions=suggestions,
488
+ context=final_context if final_context else None,
484
489
  )
485
490
 
486
491
 
@@ -303,6 +303,7 @@
303
303
  "backup.restore.safety": "Qoruyucu ehtiyat nüsxə: {name}. Əvvəlki vəziyyətə qayıtmaq üçün bu qoruyucu ehtiyat nüsxəni bərpa etməzdən əvvəl cari konfiqurasiyanı yoxlayın.",
304
304
  "backup.restore.reason.unsupported_form": "Home Assistant bu bərpa üçün uyğun forma təqdim etmədi.",
305
305
  "backup.restore.reason.unsupported_fields": "Anlıq nüsxənin bəzi sahələri cari forma tərəfindən qəbul edilmir.",
306
+ "backup.restore.reason.identity_changed": "Bəzi ehtiyat nüsxə sahələri heç bir bərpa forması tərəfindən təklif olunmur (onlar yaradılarkən təyin edilir) və onlar ehtiyat nüsxəsi yaradıldıqdan sonra dəyişdirilib.",
306
307
  "backup.restore.reason.validation_failed": "Home Assistant bərpa edilmiş konfiqurasiyanı etibarsız hesab edərək rədd etdi.",
307
308
  "backup.restore.reason.flow_aborted": "Home Assistant bərpa prosesini dayandırdı.",
308
309
  "backup.restore.fields": "Sahələr: {fields}",
@@ -303,6 +303,7 @@
303
303
  "backup.restore.safety": "Bezpečnostní záloha: {name}. Před obnovením této bezpečnostní zálohy za účelem obnovení předchozího stavu zkontrolujte aktuální konfiguraci.",
304
304
  "backup.restore.reason.unsupported_form": "Home Assistant neposkytl formulář vhodný pro toto obnovení.",
305
305
  "backup.restore.reason.unsupported_fields": "Některá pole snímku nejsou aktuálním formulářem akceptována.",
306
+ "backup.restore.reason.identity_changed": "Některá pole snímku nejsou v žádném formuláři pro obnovení k dispozici (jsou nastavena při vytvoření) a od vytvoření zálohy se změnila.",
306
307
  "backup.restore.reason.validation_failed": "Home Assistant odmítl obnovenou konfiguraci jako neplatnou.",
307
308
  "backup.restore.reason.flow_aborted": "Home Assistant přerušil proces obnovení.",
308
309
  "backup.restore.fields": "Pole: {fields}",
@@ -303,6 +303,7 @@
303
303
  "backup.restore.safety": "Sicherheitsbackup: {name}. Überprüfe die aktuelle Konfiguration, bevor du dieses Sicherheitsbackup wiederherstellst, um den vorherigen Zustand wiederherzustellen.",
304
304
  "backup.restore.reason.unsupported_form": "Home Assistant hat kein für diese Wiederherstellung geeignetes Formular bereitgestellt.",
305
305
  "backup.restore.reason.unsupported_fields": "Einige Snapshot-Felder werden vom aktuellen Formular nicht akzeptiert.",
306
+ "backup.restore.reason.identity_changed": "Einige Snapshot-Felder werden von keinem Wiederherstellungsformular angeboten (sie werden bei der Erstellung festgelegt) und haben sich seit dem Backup geändert.",
306
307
  "backup.restore.reason.validation_failed": "Home Assistant hat die wiederhergestellte Konfiguration als ungültig abgelehnt.",
307
308
  "backup.restore.reason.flow_aborted": "Home Assistant hat den Wiederherstellungsvorgang abgebrochen.",
308
309
  "backup.restore.fields": "Felder: {fields}",
@@ -303,6 +303,7 @@
303
303
  "backup.restore.safety": "Sekureca sekurkopio: {name}. Inspektu la nunan agordon antaŭ restarigi ĉi tiun sekurecan sekurkopion por rekuperi la antaŭan staton.",
304
304
  "backup.restore.reason.unsupported_form": "Home Assistant ne provizis taŭgan formularon por ĉi tiu restarigo.",
305
305
  "backup.restore.reason.unsupported_fields": "Kelkaj kampoj de la momentfoto ne estas akceptitaj de la nuna formularo.",
306
+ "backup.restore.reason.identity_changed": "Iuj konservoskopaj kampoj ne estas ofertataj de iu ajn restaŭra formularo (ili estas agorditaj dum kreado), kaj ili ŝanĝiĝis ekde la sekurkopio.",
306
307
  "backup.restore.reason.validation_failed": "Home Assistant malakceptis la restarigitan agordon kiel malvalidan.",
307
308
  "backup.restore.reason.flow_aborted": "Home Assistant ĉesigis la restarigan fluon.",
308
309
  "backup.restore.fields": "Kampoj: {fields}",
@@ -303,6 +303,7 @@
303
303
  "backup.restore.safety": "Copia de seguridad de seguridad: {name}. Inspecciona la configuración actual antes de restaurar esta copia para recuperar el estado anterior.",
304
304
  "backup.restore.reason.unsupported_form": "Home Assistant no proporcionó un formulario adecuado para esta restauración.",
305
305
  "backup.restore.reason.unsupported_fields": "El formulario actual no acepta algunos campos de la instantánea.",
306
+ "backup.restore.reason.identity_changed": "Algunos campos de la copia de seguridad no son ofrecidos por ningún formulario de restauración (se establecen en la creación) y han cambiado desde el respaldo.",
306
307
  "backup.restore.reason.validation_failed": "Home Assistant rechazó la configuración restaurada por no ser válida.",
307
308
  "backup.restore.reason.flow_aborted": "Home Assistant canceló el proceso de restauración.",
308
309
  "backup.restore.fields": "Campos: {fields}",
@@ -303,6 +303,7 @@
303
303
  "backup.restore.safety": "Sauvegarde de sécurité : {name}. Inspectez la configuration actuelle avant de restaurer cette sauvegarde de sécurité pour récupérer l'état précédent.",
304
304
  "backup.restore.reason.unsupported_form": "Home Assistant n'a pas fourni de formulaire adapté à cette restauration.",
305
305
  "backup.restore.reason.unsupported_fields": "Certains champs de l'instantané ne sont pas acceptés par le formulaire actuel.",
306
+ "backup.restore.reason.identity_changed": "Certains champs de l'instantané ne sont proposés par aucun formulaire de restauration (ils sont définis lors de la création) et ils ont changé depuis la sauvegarde.",
306
307
  "backup.restore.reason.validation_failed": "Home Assistant a rejeté la configuration restaurée car elle n'est pas valide.",
307
308
  "backup.restore.reason.flow_aborted": "Home Assistant a interrompu le processus de restauration.",
308
309
  "backup.restore.fields": "Champs : {fields}",
@@ -303,6 +303,7 @@
303
303
  "backup.restore.safety": "Backup di sicurezza: {name}. Ispeziona la configurazione corrente prima di ripristinare questo backup di sicurezza per recuperare lo stato precedente.",
304
304
  "backup.restore.reason.unsupported_form": "Home Assistant non ha fornito un modulo adatto per questo ripristino.",
305
305
  "backup.restore.reason.unsupported_fields": "Alcuni campi dello snapshot non sono accettati dal modulo corrente.",
306
+ "backup.restore.reason.identity_changed": "Alcuni campi dello snapshot non sono offerti da alcun modulo di ripristino (vengono impostati alla creazione) e sono cambiati rispetto al backup.",
306
307
  "backup.restore.reason.validation_failed": "Home Assistant ha rifiutato la configurazione ripristinata in quanto non valida.",
307
308
  "backup.restore.reason.flow_aborted": "Home Assistant ha interrotto il flusso di ripristino.",
308
309
  "backup.restore.fields": "Campi: {fields}",
@@ -303,6 +303,7 @@
303
303
  "backup.restore.safety": "안전 백업: {name}. 이전 상태로 복구하기 위해 이 안전 백업을 복원하기 전에 현재 설정을 검토하세요.",
304
304
  "backup.restore.reason.unsupported_form": "Home Assistant가 이 복원에 적합한 양식을 제공하지 않았습니다.",
305
305
  "backup.restore.reason.unsupported_fields": "일부 스냅샷 필드가 현재 양식에서 허용되지 않습니다.",
306
+ "backup.restore.reason.identity_changed": "일부 스냅샷 필드는 복원 폼에서 제공되지 않으며(생성 시 설정됨) 백업 이후 변경되었습니다.",
306
307
  "backup.restore.reason.validation_failed": "Home Assistant가 복원된 설정이 잘못되었다고 거부했습니다.",
307
308
  "backup.restore.reason.flow_aborted": "Home Assistant가 복원 흐름을 중단했습니다.",
308
309
  "backup.restore.fields": "필드: {fields}",
@@ -303,6 +303,7 @@
303
303
  "backup.restore.safety": "Veiligheidsreservekopie: {name}. Inspecteer de huidige configuratie voordat je deze veiligheidsreservekopie terugzet om de vorige staat te herstellen.",
304
304
  "backup.restore.reason.unsupported_form": "Home Assistant heeft geen formulier geleverd dat geschikt is voor deze terugzetting.",
305
305
  "backup.restore.reason.unsupported_fields": "Sommige snapshotvelden worden niet geaccepteerd door het huidige formulier.",
306
+ "backup.restore.reason.identity_changed": "Sommige snapshotvelden worden door geen enkel herstelformulier aangeboden (deze worden ingesteld bij het aanmaken) en zijn gewijzigd sinds de backup.",
306
307
  "backup.restore.reason.validation_failed": "Home Assistant heeft de teruggezette configuratie afgewezen als ongeldig.",
307
308
  "backup.restore.reason.flow_aborted": "Home Assistant heeft het terugzetproces afgebroken.",
308
309
  "backup.restore.fields": "Velden: {fields}",
@@ -303,6 +303,7 @@
303
303
  "backup.restore.safety": "Kopia zapasowa zabezpieczająca: {name}. Sprawdź bieżącą konfigurację przed przywróceniem tej kopii zabezpieczającej, aby odzyskać poprzedni stan.",
304
304
  "backup.restore.reason.unsupported_form": "Home Assistant nie udostępnił formularza odpowiedniego do tego przywracania.",
305
305
  "backup.restore.reason.unsupported_fields": "Niektóre pola migawki nie są akceptowane przez bieżący formularz.",
306
+ "backup.restore.reason.identity_changed": "Niektóre pola kopii zapasowej nie są obsługiwane przez żaden formularz przywracania (są ustawiane podczas tworzenia) i uległy zmianie od czasu utworzenia kopii zapasowej.",
306
307
  "backup.restore.reason.validation_failed": "Home Assistant odrzucił przywróconą konfigurację jako nieprawidłową.",
307
308
  "backup.restore.reason.flow_aborted": "Home Assistant przerwał proces przywracania.",
308
309
  "backup.restore.fields": "Pola: {fields}",
@@ -303,6 +303,7 @@
303
303
  "backup.restore.safety": "Резервная копия безопасности: {name}. Проверьте текущую конфигурацию перед восстановлением этой резервной копии безопасности, чтобы вернуть предыдущее состояние.",
304
304
  "backup.restore.reason.unsupported_form": "Home Assistant не предоставил форму, подходящую для этого восстановления.",
305
305
  "backup.restore.reason.unsupported_fields": "Некоторые поля снимка не принимаются текущей формой.",
306
+ "backup.restore.reason.identity_changed": "Некоторые поля резервной копии не поддерживаются ни одной формой восстановления (они задаются при создании) и изменились с момента создания бэкапа.",
306
307
  "backup.restore.reason.validation_failed": "Home Assistant отклонил восстановленную конфигурацию как недействительную.",
307
308
  "backup.restore.reason.flow_aborted": "Home Assistant прервал процесс восстановления.",
308
309
  "backup.restore.fields": "Поля: {fields}",
@@ -303,6 +303,7 @@
303
303
  "backup.restore.safety": "Säkerhetskopia: {name}. Inspektera den aktuella konfigurationen innan du återställer denna säkerhetskopia för att återställa det föregående tillståndet.",
304
304
  "backup.restore.reason.unsupported_form": "Home Assistant tillhandahöll inte ett formulär som passar för denna återställning.",
305
305
  "backup.restore.reason.unsupported_fields": "Vissa fält i ögonblicksbilden accepteras inte av det aktuella formuläret.",
306
+ "backup.restore.reason.identity_changed": "Vissa fält i ögonblicksbilden erbjuds inte av någon återställningsformulär (de ställs in vid skapandet), och de har ändrats sedan säkerhetskopieringen.",
306
307
  "backup.restore.reason.validation_failed": "Home Assistant avvisade den återställda konfigurationen som ogiltig.",
307
308
  "backup.restore.reason.flow_aborted": "Home Assistant avbröt återställningsflödet.",
308
309
  "backup.restore.fields": "Fält: {fields}",
@@ -303,6 +303,7 @@
303
303
  "backup.restore.safety": "安全备份:{name}。在恢复此安全备份以恢复先前的状态之前,请检查当前配置。",
304
304
  "backup.restore.reason.unsupported_form": "Home Assistant 未提供适合此恢复的表单。",
305
305
  "backup.restore.reason.unsupported_fields": "当前表单不接受某些快照字段。",
306
+ "backup.restore.reason.identity_changed": "某些备份字段不由任何还原表单提供(它们在创建时设置),并且它们在备份后已更改。",
306
307
  "backup.restore.reason.validation_failed": "Home Assistant 拒绝了恢复的配置,因为其无效。",
307
308
  "backup.restore.reason.flow_aborted": "Home Assistant 中止了恢复流程。",
308
309
  "backup.restore.fields": "字段:{fields}",
@@ -303,6 +303,7 @@
303
303
  "backup.restore.safety": "安全備份:{name}。在還原此安全備份以恢復先前的狀態之前,請先檢查目前的設定。",
304
304
  "backup.restore.reason.unsupported_form": "Home Assistant 未提供適合此還原的表單。",
305
305
  "backup.restore.reason.unsupported_fields": "目前的表單不接受某些快照欄位。",
306
+ "backup.restore.reason.identity_changed": "某些快照欄位未由任何還原表單提供(它們是在建立時設定的),且自備份以來這些欄位已變更。",
306
307
  "backup.restore.reason.validation_failed": "Home Assistant 拒絕已還原的設定,因為設定無效。",
307
308
  "backup.restore.reason.flow_aborted": "Home Assistant 已中止還原流程。",
308
309
  "backup.restore.fields": "欄位:{fields}",
@@ -0,0 +1,185 @@
1
+ """Input-validation rejections for config writes (issue #2649).
2
+
3
+ Kept out of tools_config_automations.py so that file stays under its
4
+ module-size baseline. The helpers raise through ``raise_tool_error`` and
5
+ carry no client or Home Assistant dependency.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ from typing import Any
11
+
12
+ from ..errors import ErrorCode, create_error_response
13
+ from .helpers import raise_tool_error
14
+
15
+ # Guidance reused wherever the runtime-only ``enabled`` key folds into
16
+ # another rejection.
17
+ ENABLED_MISPLACED_GUIDANCE = (
18
+ "'enabled' is a runtime-only tool parameter, not a valid automation "
19
+ "config key — pass it to ha_config_set_automation as enabled=True/False "
20
+ "instead of putting it in config."
21
+ )
22
+ ENABLED_REMOVE_SUGGESTION = (
23
+ "Remove 'enabled' from config and pass enabled=True or False "
24
+ "to ha_config_set_automation"
25
+ )
26
+ ENABLED_UNCHANGED_SUGGESTION = (
27
+ "Use enabled=None to leave the current runtime state unchanged"
28
+ )
29
+
30
+
31
+ def config_has_enabled(config: Any) -> bool:
32
+ """Whether a config body carries the runtime-only ``enabled`` key."""
33
+ return isinstance(config, dict) and "enabled" in config
34
+
35
+
36
+ def _missing_fields_shape(is_blueprint: bool) -> str:
37
+ """One-line expected config shape with copy-pasteable quoted keys."""
38
+ if is_blueprint:
39
+ return (
40
+ "config={'alias': 'My Automation', 'use_blueprint': "
41
+ "{'path': 'light.yaml', 'input': {...}}}"
42
+ )
43
+ return "config={'alias': 'My Automation', 'triggers': [...], 'actions': [...]}"
44
+
45
+
46
+ def _missing_field_guidance(
47
+ missing_fields: list[str], is_blueprint: bool, source: str
48
+ ) -> tuple[str, list[str]]:
49
+ """Message and suggestions for missing required fields, worded by source.
50
+
51
+ For the ``config`` argument the guidance points inside ``config``; for a
52
+ ``python_transform`` the config came from a transform expression, so the
53
+ guidance points at the transform instead (telling it to send
54
+ ``config={...}`` would earn a write-modes rejection).
55
+ """
56
+ fields = ", ".join(missing_fields)
57
+ if source == "python_transform":
58
+ first = missing_fields[0]
59
+ return (
60
+ f"Missing required fields: {fields}. Add them in your "
61
+ f"python_transform expression, e.g. config['{first}'] = ... .",
62
+ [
63
+ "Set the missing field(s) on the transformed config, e.g. "
64
+ f"config['{first}'] = '...'."
65
+ ],
66
+ )
67
+ shape = _missing_fields_shape(is_blueprint)
68
+ return (
69
+ f"Missing required fields: {fields}. Required automation fields go "
70
+ f"inside `config`, e.g. {shape}.",
71
+ [f"Add the missing field(s) inside the `config` argument: {shape}."],
72
+ )
73
+
74
+
75
+ def reject_sequence_misroute(
76
+ config_dict: dict[str, Any],
77
+ missing_fields: list[str],
78
+ identifier: str | None,
79
+ source: str = "config",
80
+ ) -> None:
81
+ """Raise when a 'sequence' key shows the config is really a script.
82
+
83
+ Returns silently when the config does not look script-shaped, so the
84
+ caller stays a one-liner. A runtime-only ``enabled`` key folds into the
85
+ same rejection instead of costing another round trip.
86
+ """
87
+ if not (
88
+ missing_fields
89
+ and "sequence" in config_dict
90
+ and ("triggers" in missing_fields or "actions" in missing_fields)
91
+ ):
92
+ return
93
+ context: dict[str, Any] = {"missing_fields": missing_fields}
94
+ if identifier:
95
+ context["identifier"] = identifier
96
+ message = f"Missing required fields: {', '.join(missing_fields)}"
97
+ if source == "python_transform":
98
+ automation_fix = (
99
+ "In the python_transform expression, replace 'sequence' with "
100
+ "'actions' and add 'triggers'."
101
+ )
102
+ if "alias" in missing_fields:
103
+ automation_fix += (
104
+ " Set 'alias' in the expression too, e.g. config['alias'] = '...'."
105
+ )
106
+ else:
107
+ automation_fix = (
108
+ "For an automation, replace 'sequence' with 'actions' and add 'triggers'."
109
+ )
110
+ if "alias" in missing_fields:
111
+ automation_fix += (
112
+ " Put 'alias' inside `config` too, e.g. "
113
+ f"{_missing_fields_shape(is_blueprint=False)}."
114
+ )
115
+ suggestions = [
116
+ "Did you mean ha_config_set_script? Scripts use 'sequence' directly.",
117
+ automation_fix,
118
+ ]
119
+ if config_has_enabled(config_dict):
120
+ context["invalid_key"] = "enabled"
121
+ message += f". {ENABLED_MISPLACED_GUIDANCE}"
122
+ suggestions.extend([ENABLED_REMOVE_SUGGESTION, ENABLED_UNCHANGED_SUGGESTION])
123
+ raise_tool_error(
124
+ create_error_response(
125
+ code=ErrorCode.CONFIG_MISSING_REQUIRED_FIELDS,
126
+ message=message,
127
+ details=(
128
+ "Config contains 'sequence', which belongs to scripts. "
129
+ "Automations use 'triggers' and 'actions'; scripts use 'sequence'."
130
+ ),
131
+ suggestions=suggestions,
132
+ context=context,
133
+ )
134
+ )
135
+
136
+
137
+ def reject_invalid_config_inputs(
138
+ config_dict: dict[str, Any],
139
+ missing_fields: list[str],
140
+ identifier: str | None,
141
+ source: str = "config",
142
+ ) -> None:
143
+ """Raise the structured rejection for a config write's input violations.
144
+
145
+ A missing-field rejection says where the field goes and shows the
146
+ expected shape in one line; a runtime-only ``enabled`` key together with
147
+ missing required fields surfaces in ONE rejection instead of one round
148
+ trip each. Returns silently when the inputs are valid.
149
+ """
150
+ enabled_in_config = config_has_enabled(config_dict)
151
+ if not missing_fields and not enabled_in_config:
152
+ return
153
+ context: dict[str, Any] = {}
154
+ if identifier:
155
+ context["identifier"] = identifier
156
+ if missing_fields:
157
+ context["missing_fields"] = missing_fields
158
+ message, suggestions = _missing_field_guidance(
159
+ missing_fields, "use_blueprint" in config_dict, source
160
+ )
161
+ if enabled_in_config:
162
+ context["invalid_key"] = "enabled"
163
+ message = f"{message} {ENABLED_MISPLACED_GUIDANCE}"
164
+ suggestions = suggestions + [
165
+ ENABLED_REMOVE_SUGGESTION,
166
+ ENABLED_UNCHANGED_SUGGESTION,
167
+ ]
168
+ raise_tool_error(
169
+ create_error_response(
170
+ code=ErrorCode.CONFIG_MISSING_REQUIRED_FIELDS,
171
+ message=message,
172
+ details=f"Missing required fields: {', '.join(missing_fields)}",
173
+ suggestions=suggestions,
174
+ context=context or None,
175
+ )
176
+ )
177
+ raise_tool_error(
178
+ create_error_response(
179
+ ErrorCode.VALIDATION_INVALID_PARAMETER,
180
+ "'enabled' is a runtime-only tool parameter, not a valid "
181
+ "automation config key",
182
+ suggestions=[ENABLED_REMOVE_SUGGESTION, ENABLED_UNCHANGED_SUGGESTION],
183
+ context={"action": "set", "invalid_key": "enabled"},
184
+ )
185
+ )
@@ -20,7 +20,6 @@ from ..client.rest_client import (
20
20
  )
21
21
  from ..errors import (
22
22
  ErrorCode,
23
- create_config_error,
24
23
  create_error_response,
25
24
  create_validation_error,
26
25
  )
@@ -47,6 +46,10 @@ from .blueprint_substitute import (
47
46
  from .coercion import JSON_STRING_COERCION, coerce_to_list, parse_json_param
48
47
  from .component_config_reads import fetch_entity_lookup_via_component
49
48
  from .config_helpers.registry import validate_registry_ids
49
+ from .config_write_errors import (
50
+ reject_invalid_config_inputs,
51
+ reject_sequence_misroute,
52
+ )
50
53
  from .config_write_helpers import (
51
54
  apply_entity_category,
52
55
  attach_skill_content,
@@ -425,24 +428,6 @@ def _run_actions_once_reloaded(
425
428
  _STANDALONE_RUNTIME_ACTIONS = ("set_enabled", "run_actions")
426
429
 
427
430
 
428
- def _reject_enabled_in_config(config: Any) -> None:
429
- """Reject the runtime-only ``enabled`` key in a stored config body."""
430
- if isinstance(config, dict) and "enabled" in config:
431
- raise_tool_error(
432
- create_error_response(
433
- ErrorCode.VALIDATION_INVALID_PARAMETER,
434
- "'enabled' is a runtime-only tool parameter, not a valid "
435
- "automation config key",
436
- suggestions=[
437
- "Remove 'enabled' from config and pass enabled=True or False "
438
- + "to ha_config_set_automation",
439
- "Use enabled=None to leave the current runtime state unchanged",
440
- ],
441
- context={"action": "set", "invalid_key": "enabled"},
442
- )
443
- )
444
-
445
-
446
431
  async def _set_automation_enabled(client: Any, entity_id: str, enabled: bool) -> Any:
447
432
  """Set an automation's runtime enabled state through Home Assistant."""
448
433
  service = "turn_on" if enabled else "turn_off"
@@ -902,7 +887,6 @@ class AutomationConfigTools:
902
887
  )
903
888
 
904
889
  config_dict = self._parse_and_validate_config(config)
905
- _reject_enabled_in_config(config_dict)
906
890
 
907
891
  # Extract category before sending to HA REST API (which rejects unknown keys).
908
892
  # Parameter takes precedence over config dict value.
@@ -917,6 +901,13 @@ class AutomationConfigTools:
917
901
  # (trigger -> triggers, action -> actions, condition -> conditions).
918
902
  config_dict = _normalize_automation_config(config_dict)
919
903
 
904
+ # Purely local input checks run before the tool's own reads, so
905
+ # a malformed config rejects without spending the hash check's
906
+ # or the alias guard's GETs. (The auto-backup wrapper may take
907
+ # its pre-write snapshot first on updates; that read is outside
908
+ # this tool's control.)
909
+ self._validate_required_fields(config_dict, identifier)
910
+
920
911
  # Both the hash check and alias guard read the resolved storage key.
921
912
  # Reuse it for the write to avoid a second entity-ID lookup (#1813).
922
913
  # Creation and responses without an id retain the existing fallback.
@@ -930,7 +921,6 @@ class AutomationConfigTools:
930
921
  identifier, config_dict
931
922
  )
932
923
 
933
- self._validate_required_fields(config_dict, identifier)
934
924
  bp_warnings = _check_best_practices(config_dict)
935
925
  validation_meta = await validate_config_references(
936
926
  self._client, config_dict
@@ -1377,7 +1367,6 @@ class AutomationConfigTools:
1377
1367
  source="python_transform",
1378
1368
  )
1379
1369
  # Pop category before sending to HA REST API (rejects unknown keys)
1380
- _reject_enabled_in_config(transformed_config)
1381
1370
  transform_category = transformed_config.pop("category", None)
1382
1371
  effective_category = category if category is not None else transform_category
1383
1372
 
@@ -1387,7 +1376,9 @@ class AutomationConfigTools:
1387
1376
  conflict_warnings = _detect_conflicting_root_keys(transformed_config)
1388
1377
 
1389
1378
  transformed_config = _normalize_automation_config(transformed_config)
1390
- self._validate_required_fields(transformed_config, identifier)
1379
+ self._validate_required_fields(
1380
+ transformed_config, identifier, source="python_transform"
1381
+ )
1391
1382
  bp_warnings = _check_best_practices(transformed_config)
1392
1383
 
1393
1384
  # Issue #2159: reject an unknown category before the write, so a
@@ -1848,9 +1839,13 @@ class AutomationConfigTools:
1848
1839
 
1849
1840
  @staticmethod
1850
1841
  def _validate_required_fields(
1851
- config_dict: dict[str, Any], identifier: str | None
1842
+ config_dict: dict[str, Any], identifier: str | None, source: str = "config"
1852
1843
  ) -> None:
1853
- """Validate required fields and prevent duplicate creation."""
1844
+ """Validate required fields and prevent duplicate creation.
1845
+
1846
+ A missing required field and a misplaced runtime-only ``enabled`` key
1847
+ surface in ONE rejection (issue #2649).
1848
+ """
1854
1849
  if "use_blueprint" in config_dict:
1855
1850
  required_fields = ["alias"]
1856
1851
  # Strip empty triggers/actions/conditions arrays that would override blueprint
@@ -1861,38 +1856,8 @@ class AutomationConfigTools:
1861
1856
  required_fields = ["alias", "triggers", "actions"]
1862
1857
 
1863
1858
  missing_fields = [f for f in required_fields if f not in config_dict]
1864
- if missing_fields:
1865
- # If the caller supplied a 'sequence' key, the config looks like a
1866
- # script — point them at ha_config_set_script instead of the generic
1867
- # missing-fields error.
1868
- if "sequence" in config_dict and (
1869
- "triggers" in missing_fields or "actions" in missing_fields
1870
- ):
1871
- context: dict[str, Any] = {"missing_fields": missing_fields}
1872
- if identifier:
1873
- context["identifier"] = identifier
1874
- raise_tool_error(
1875
- create_error_response(
1876
- code=ErrorCode.CONFIG_MISSING_REQUIRED_FIELDS,
1877
- message=f"Missing required fields: {', '.join(missing_fields)}",
1878
- details=(
1879
- "Config contains 'sequence', which belongs to scripts. "
1880
- "Automations use 'triggers' and 'actions'; scripts use 'sequence'."
1881
- ),
1882
- suggestions=[
1883
- "Did you mean ha_config_set_script? Scripts use 'sequence' directly.",
1884
- "For an automation, replace 'sequence' with 'actions' and add 'triggers'.",
1885
- ],
1886
- context=context,
1887
- )
1888
- )
1889
- raise_tool_error(
1890
- create_config_error(
1891
- f"Missing required fields: {', '.join(missing_fields)}",
1892
- identifier=identifier,
1893
- missing_fields=missing_fields,
1894
- )
1895
- )
1859
+ reject_sequence_misroute(config_dict, missing_fields, identifier, source)
1860
+ reject_invalid_config_inputs(config_dict, missing_fields, identifier, source)
1896
1861
 
1897
1862
  # Issue #1169: see _check_scene_create_misroute
1898
1863
  AutomationConfigTools._check_scene_create_misroute(config_dict, identifier)