ha-mcp-dev 8.6.0.dev2985__tar.gz → 8.6.0.dev2990__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 (778) hide show
  1. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/PKG-INFO +2 -2
  2. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/README.md +1 -1
  3. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/pyproject.toml +1 -1
  4. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/pyproject.toml.orig +1 -1
  5. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/errors.py +2 -1
  6. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/llm_exposure.py +9 -1
  7. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/read_only.py +20 -11
  8. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/server_tool_text.py +18 -10
  9. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/config_helpers/update.py +5 -1
  10. ha_mcp_dev-8.6.0.dev2990/src/ha_mcp/tools/flow_helper_lookup.py +400 -0
  11. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/helpers.py +6 -2
  12. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/tools_integrations.py +203 -268
  13. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/tools_search.py +3 -1
  14. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/transforms/categorized_search.py +147 -35
  15. ha_mcp_dev-8.6.0.dev2990/src/ha_mcp/transforms/compact_params.py +87 -0
  16. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/LICENSE +0 -0
  17. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/__init__.py +0 -0
  18. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/__main__.py +0 -0
  19. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_pypi_marker +0 -0
  20. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_rich_compat.py +0 -0
  21. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/__init__.py +0 -0
  22. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
  23. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
  24. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
  25. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
  26. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
  27. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
  28. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
  29. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
  30. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
  31. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
  32. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
  33. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
  34. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
  35. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
  36. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
  37. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
  38. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
  39. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
  40. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
  41. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
  42. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
  43. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
  44. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
  45. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
  46. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
  47. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
  48. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
  49. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
  50. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
  51. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
  52. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
  53. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
  54. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
  55. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
  56. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
  57. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
  58. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
  59. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
  60. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
  61. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
  62. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
  63. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
  64. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
  65. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
  66. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
  67. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
  68. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
  69. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
  70. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
  71. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
  72. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
  73. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
  74. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
  75. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
  76. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
  77. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
  78. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
  79. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
  80. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
  81. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
  82. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
  83. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
  84. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
  85. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
  86. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
  87. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
  88. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
  89. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
  90. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
  91. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
  92. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
  93. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
  94. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
  95. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
  96. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
  97. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
  98. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
  99. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
  100. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
  101. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
  102. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
  103. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
  104. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
  105. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
  106. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
  107. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
  108. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
  109. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
  110. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
  111. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
  112. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
  113. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
  114. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
  115. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
  116. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
  117. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
  118. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
  119. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/jev_search.py +0 -0
  120. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
  121. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
  122. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
  123. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
  124. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
  125. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
  126. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
  127. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
  128. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
  129. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
  130. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
  131. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
  132. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
  133. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
  134. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
  135. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
  136. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
  137. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
  138. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
  139. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
  140. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
  141. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
  142. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
  143. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
  144. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
  145. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
  146. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
  147. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
  148. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
  149. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
  150. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
  151. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
  152. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
  153. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
  154. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
  155. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
  156. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
  157. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
  158. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
  159. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
  160. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
  161. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
  162. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
  163. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
  164. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
  165. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
  166. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
  167. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
  168. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
  169. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
  170. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
  171. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
  172. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
  173. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
  174. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
  175. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
  176. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
  177. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
  178. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
  179. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
  180. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
  181. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
  182. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
  183. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
  184. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
  185. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
  186. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
  187. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
  188. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
  189. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
  190. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
  191. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
  192. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
  193. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
  194. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
  195. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
  196. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
  197. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
  198. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
  199. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
  200. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
  201. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
  202. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
  203. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
  204. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
  205. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
  206. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
  207. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
  208. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
  209. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
  210. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
  211. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
  212. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
  213. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
  214. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
  215. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
  216. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
  217. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
  218. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
  219. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
  220. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
  221. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
  222. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
  223. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
  224. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
  225. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
  226. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
  227. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
  228. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
  229. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
  230. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
  231. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
  232. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
  233. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
  234. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
  235. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
  236. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
  237. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
  238. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
  239. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
  240. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
  241. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
  242. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
  243. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
  244. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
  245. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
  246. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
  247. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
  248. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
  249. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
  250. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
  251. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
  252. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
  253. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
  254. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
  255. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
  256. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
  257. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
  258. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
  259. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
  260. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
  261. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
  262. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
  263. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
  264. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
  265. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
  266. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
  267. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
  268. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
  269. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
  270. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
  271. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
  272. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
  273. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
  274. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
  275. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
  276. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
  277. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
  278. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
  279. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
  280. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
  281. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
  282. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
  283. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
  284. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
  285. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
  286. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
  287. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
  288. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
  289. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
  290. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
  291. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
  292. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
  293. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
  294. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
  295. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
  296. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
  297. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
  298. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
  299. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
  300. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
  301. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
  302. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
  303. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
  304. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
  305. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
  306. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
  307. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
  308. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
  309. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
  310. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
  311. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
  312. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
  313. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
  314. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
  315. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
  316. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
  317. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
  318. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
  319. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
  320. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
  321. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
  322. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
  323. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
  324. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
  325. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
  326. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
  327. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
  328. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
  329. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
  330. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
  331. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
  332. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
  333. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
  334. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
  335. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
  336. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
  337. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
  338. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
  339. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
  340. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
  341. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
  342. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
  343. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
  344. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
  345. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
  346. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
  347. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
  348. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
  349. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
  350. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
  351. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
  352. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
  353. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
  354. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
  355. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
  356. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
  357. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
  358. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
  359. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
  360. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
  361. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
  362. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
  363. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
  364. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
  365. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
  366. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
  367. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
  368. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
  369. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
  370. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
  371. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
  372. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
  373. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
  374. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
  375. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
  376. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
  377. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
  378. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
  379. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
  380. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
  381. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
  382. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
  383. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
  384. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
  385. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
  386. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
  387. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
  388. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
  389. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
  390. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
  391. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
  392. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
  393. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
  394. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
  395. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
  396. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
  397. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
  398. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
  399. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
  400. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
  401. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
  402. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
  403. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
  404. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
  405. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
  406. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
  407. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
  408. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
  409. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
  410. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
  411. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
  412. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
  413. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
  414. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
  415. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
  416. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
  417. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
  418. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
  419. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
  420. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
  421. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
  422. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
  423. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
  424. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
  425. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
  426. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
  427. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
  428. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
  429. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
  430. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
  431. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
  432. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
  433. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/requirements.txt +0 -0
  434. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
  435. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
  436. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
  437. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
  438. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
  439. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
  440. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
  441. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
  442. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
  443. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
  444. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
  445. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
  446. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
  447. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/client.py +0 -0
  448. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
  449. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
  450. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
  451. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
  452. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
  453. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
  454. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
  455. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
  456. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
  457. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
  458. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
  459. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
  460. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
  461. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
  462. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
  463. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
  464. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
  465. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
  466. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
  467. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
  468. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
  469. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
  470. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/server.py +0 -0
  471. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
  472. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
  473. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
  474. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
  475. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
  476. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
  477. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
  478. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
  479. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
  480. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
  481. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
  482. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
  483. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
  484. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
  485. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
  486. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
  487. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
  488. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
  489. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_vendor/websockets/version.py +0 -0
  490. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/_version.py +0 -0
  491. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/app_discovery.py +0 -0
  492. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/auth/__init__.py +0 -0
  493. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/auth/consent_form.py +0 -0
  494. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/auth/oidc_compat.py +0 -0
  495. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/auth/provider.py +0 -0
  496. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/backup_diff.py +0 -0
  497. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/backup_entity_ids.py +0 -0
  498. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/backup_manager.py +0 -0
  499. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/backup_tags.py +0 -0
  500. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/browser_landing.py +0 -0
  501. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/client/__init__.py +0 -0
  502. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/client/admin_routes.py +0 -0
  503. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/client/rest_client.py +0 -0
  504. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/client/supervisor_client.py +0 -0
  505. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/client/websocket_client.py +0 -0
  506. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/client/websocket_listener.py +0 -0
  507. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/config.py +0 -0
  508. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/config_backup.py +0 -0
  509. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/config_meta.py +0 -0
  510. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/config_overrides.py +0 -0
  511. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/config_registry.py +0 -0
  512. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/config_settings.py +0 -0
  513. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
  514. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
  515. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
  516. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
  517. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
  518. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
  519. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/ha_request_queue.py +0 -0
  520. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/hacs_auto_refresh.py +0 -0
  521. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/http_transport.py +0 -0
  522. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/image_info.py +0 -0
  523. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/log_filters.py +0 -0
  524. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/policy/__init__.py +0 -0
  525. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/policy/approval_queue.py +0 -0
  526. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/policy/decision_pin.py +0 -0
  527. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/policy/decisions.py +0 -0
  528. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/policy/editing.py +0 -0
  529. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/policy/evaluator.py +0 -0
  530. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/policy/events.py +0 -0
  531. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/policy/handlers.py +0 -0
  532. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/policy/middleware.py +0 -0
  533. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/policy/model.py +0 -0
  534. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/policy/mrtr.py +0 -0
  535. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/policy/persistence.py +0 -0
  536. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/policy/server_channels.py +0 -0
  537. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/policy/value_sources.py +0 -0
  538. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/py.typed +0 -0
  539. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/redaction.py +0 -0
  540. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/renamed_tools.py +0 -0
  541. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  542. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  543. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
  544. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-actions.md +0 -0
  545. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
  546. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
  547. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  548. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  549. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  550. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  551. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  552. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  553. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  554. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
  555. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  556. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/triggers-and-conditions.md +0 -0
  557. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
  558. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/server.py +0 -0
  559. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/server_lifespan.py +0 -0
  560. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/settings_ui/__init__.py +0 -0
  561. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
  562. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
  563. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
  564. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
  565. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
  566. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
  567. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/settings_ui/_i18n.py +0 -0
  568. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
  569. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/settings_ui/_persistence.py +0 -0
  570. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
  571. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/settings_ui/_theme.py +0 -0
  572. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
  573. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/settings_ui/locales/README.md +0 -0
  574. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/settings_ui/locales/az.json +0 -0
  575. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
  576. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/settings_ui/locales/de.json +0 -0
  577. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/settings_ui/locales/en.json +0 -0
  578. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
  579. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/settings_ui/locales/es.json +0 -0
  580. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
  581. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/settings_ui/locales/it.json +0 -0
  582. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
  583. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
  584. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
  585. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
  586. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
  587. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
  588. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
  589. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
  590. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/settings_ui/settings.css +0 -0
  591. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/settings_ui/settings.html +0 -0
  592. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/settings_ui/settings_js/01_i18n_state.js +0 -0
  593. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/settings_ui/settings_js/02_tools_restart.js +0 -0
  594. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/settings_ui/settings_js/03_render_save.js +0 -0
  595. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/settings_ui/settings_js/04_backups.js +0 -0
  596. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/settings_ui/settings_js/05_feature_flags.js +0 -0
  597. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/settings_ui/settings_js/06_policy_cards.js +0 -0
  598. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/settings_ui/settings_js/07_policy_actions.js +0 -0
  599. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/settings_ui/settings_js/08_advanced.js +0 -0
  600. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/settings_ui/settings_js/09_prefs_visibility.js +0 -0
  601. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/smoke_test.py +0 -0
  602. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  603. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/strict_bps.py +0 -0
  604. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tool_dispatch.py +0 -0
  605. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/__init__.py +0 -0
  606. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/area_messages.py +0 -0
  607. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/auto_backup.py +0 -0
  608. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/backup.py +0 -0
  609. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/backup_access.py +0 -0
  610. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/backup_on_demand.py +0 -0
  611. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  612. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/best_practice_result.py +0 -0
  613. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/best_practice_variables.py +0 -0
  614. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/blueprint_sources.py +0 -0
  615. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
  616. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/blueprint_write.py +0 -0
  617. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/bug_report_config.py +0 -0
  618. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/bug_report_templates.py +0 -0
  619. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/bulk_selector.py +0 -0
  620. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/coercion.py +0 -0
  621. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/component_api.py +0 -0
  622. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/component_config_entries.py +0 -0
  623. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/component_config_reads.py +0 -0
  624. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
  625. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/component_devices.py +0 -0
  626. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/component_helper_collections.py +0 -0
  627. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/component_registries.py +0 -0
  628. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
  629. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/config_entry_backup.py +0 -0
  630. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/config_entry_flow.py +0 -0
  631. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
  632. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/config_entry_flow_introspect.py +0 -0
  633. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
  634. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
  635. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/config_entry_identity.py +0 -0
  636. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
  637. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
  638. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/config_helpers/__init__.py +0 -0
  639. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/config_helpers/core_payload.py +0 -0
  640. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/config_helpers/create.py +0 -0
  641. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/config_helpers/describe.py +0 -0
  642. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/config_helpers/flow.py +0 -0
  643. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/config_helpers/listing.py +0 -0
  644. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/config_helpers/registry.py +0 -0
  645. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/config_helpers/schemas.py +0 -0
  646. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/config_helpers/typed_config.py +0 -0
  647. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/config_helpers/validation.py +0 -0
  648. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/config_subentry_restore.py +0 -0
  649. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/config_write_errors.py +0 -0
  650. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/config_write_helpers.py +0 -0
  651. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/core_contract.py +0 -0
  652. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/dashboard_card_describe.py +0 -0
  653. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
  654. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/dashboard_list_checks.py +0 -0
  655. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/dev_backup.py +0 -0
  656. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/device_control.py +0 -0
  657. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/device_enrichment.py +0 -0
  658. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/diagnostics_helpers.py +0 -0
  659. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/energy_preferences.py +0 -0
  660. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/entity_param_parsing.py +0 -0
  661. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/entity_registration.py +0 -0
  662. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/entity_update_fields.py +0 -0
  663. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/error_log_parsing.py +0 -0
  664. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/hacs_registration.py +0 -0
  665. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/history_response.py +0 -0
  666. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
  667. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/log_common.py +0 -0
  668. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/log_sources.py +0 -0
  669. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/log_sources_fault.py +0 -0
  670. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
  671. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/radio/__init__.py +0 -0
  672. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/radio/base.py +0 -0
  673. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/radio/matter.py +0 -0
  674. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/radio/thread.py +0 -0
  675. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/radio/zigbee.py +0 -0
  676. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/radio/zwave.py +0 -0
  677. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/radio/zwave_parameters.py +0 -0
  678. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/recorder_errors.py +0 -0
  679. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/reference_validator.py +0 -0
  680. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/registry.py +0 -0
  681. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
  682. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/response_helpers.py +0 -0
  683. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/scene_discovery.py +0 -0
  684. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/search/__init__.py +0 -0
  685. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/search/base.py +0 -0
  686. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/search/component.py +0 -0
  687. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/search/entities.py +0 -0
  688. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/search/legacy.py +0 -0
  689. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/search/modes.py +0 -0
  690. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/search/overview.py +0 -0
  691. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/search/response.py +0 -0
  692. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/search/state.py +0 -0
  693. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  694. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  695. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  696. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
  697. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  698. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  699. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
  700. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  701. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  702. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  703. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/statistics_helpers.py +0 -0
  704. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/statistics_resets.py +0 -0
  705. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/system_restart.py +0 -0
  706. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/tool_hints.py +0 -0
  707. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
  708. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/tools_addons.py +0 -0
  709. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/tools_areas.py +0 -0
  710. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
  711. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  712. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  713. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/tools_calendar.py +0 -0
  714. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/tools_camera.py +0 -0
  715. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/tools_categories.py +0 -0
  716. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/tools_code.py +0 -0
  717. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/tools_config_automations.py +0 -0
  718. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
  719. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  720. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
  721. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
  722. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
  723. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/tools_dev.py +0 -0
  724. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/tools_energy.py +0 -0
  725. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/tools_entities.py +0 -0
  726. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  727. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/tools_groups.py +0 -0
  728. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/tools_hacs.py +0 -0
  729. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/tools_history.py +0 -0
  730. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/tools_labels.py +0 -0
  731. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/tools_logs.py +0 -0
  732. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/tools_radio.py +0 -0
  733. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/tools_registry.py +0 -0
  734. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/tools_resources.py +0 -0
  735. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/tools_security_policy.py +0 -0
  736. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/tools_service.py +0 -0
  737. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/tools_services.py +0 -0
  738. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/tools_system.py +0 -0
  739. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/tools_themes.py +0 -0
  740. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/tools_todo.py +0 -0
  741. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/tools_traces.py +0 -0
  742. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/tools_updates.py +0 -0
  743. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/tools_utility.py +0 -0
  744. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  745. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  746. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
  747. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/tools_zones.py +0 -0
  748. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/util_helpers.py +0 -0
  749. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/validation_middleware.py +0 -0
  750. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/tools/ws_waiters.py +0 -0
  751. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/transforms/__init__.py +0 -0
  752. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/transforms/component_helpers.py +0 -0
  753. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/transforms/component_search.py +0 -0
  754. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  755. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/transforms/write_tool_note.py +0 -0
  756. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/transport_security.py +0 -0
  757. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/update_check.py +0 -0
  758. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/utils/__init__.py +0 -0
  759. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/utils/config_hash.py +0 -0
  760. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/utils/config_write_lock.py +0 -0
  761. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/utils/dashboard_patch.py +0 -0
  762. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/utils/data_paths.py +0 -0
  763. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
  764. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/utils/domain_handlers.py +0 -0
  765. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/utils/entity_membership.py +0 -0
  766. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  767. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  768. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/utils/mcp_client_host.py +0 -0
  769. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/utils/operation_manager.py +0 -0
  770. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/utils/python_sandbox.py +0 -0
  771. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/utils/registry_update_lock.py +0 -0
  772. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/utils/skill_loader.py +0 -0
  773. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/utils/usage_logger.py +0 -0
  774. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/visibility/__init__.py +0 -0
  775. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/visibility/enforcement.py +0 -0
  776. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/visibility/model.py +0 -0
  777. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/src/ha_mcp/visibility/persistence.py +0 -0
  778. {ha_mcp_dev-8.6.0.dev2985 → ha_mcp_dev-8.6.0.dev2990}/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.dev2985
3
+ Version: 8.6.0.dev2990
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
@@ -413,7 +413,7 @@ Set ENABLE_TOOL_SEARCH=true (or toggle the option in the HA app). The full catal
413
413
 
414
414
  | Tool | Purpose |
415
415
  |------|---------|
416
- | `ha_search_tools` | BM25 English-keyword search across all tools, pinned ones included. Hidden tools return name, description, parameters, and annotations (`readOnlyHint` / `destructiveHint`) so the agent can pick the right one; a pinned tool returns a name-only stub (`pinned: true`) pointing back at the tool list, and does not use up a result slot. |
416
+ | `ha_search_tools` | BM25 English-keyword search across all tools, pinned ones included. A hidden tool comes back compact: name, one-line description (the docstring's first paragraph), a one-line `params` list (types, enum values, required) and the proxy that executes it. `ha_search_tools(tools=[...])` returns the full definition (description, input schema and annotations) of the named tools, the second hop before a call. A pinned tool returns a name-only stub (`pinned: true`) pointing back at the tool list, and does not use up a result slot. |
417
417
  | `ha_call_read_tool` | Execute a `readOnlyHint` tool by name. Safe — clients can auto-approve. |
418
418
  | `ha_call_write_tool` | Execute a write tool that creates or updates data. |
419
419
  | `ha_call_delete_tool` | Execute a tool that removes / deletes data. |
@@ -353,7 +353,7 @@ Set ENABLE_TOOL_SEARCH=true (or toggle the option in the HA app). The full catal
353
353
 
354
354
  | Tool | Purpose |
355
355
  |------|---------|
356
- | `ha_search_tools` | BM25 English-keyword search across all tools, pinned ones included. Hidden tools return name, description, parameters, and annotations (`readOnlyHint` / `destructiveHint`) so the agent can pick the right one; a pinned tool returns a name-only stub (`pinned: true`) pointing back at the tool list, and does not use up a result slot. |
356
+ | `ha_search_tools` | BM25 English-keyword search across all tools, pinned ones included. A hidden tool comes back compact: name, one-line description (the docstring's first paragraph), a one-line `params` list (types, enum values, required) and the proxy that executes it. `ha_search_tools(tools=[...])` returns the full definition (description, input schema and annotations) of the named tools, the second hop before a call. A pinned tool returns a name-only stub (`pinned: true`) pointing back at the tool list, and does not use up a result slot. |
357
357
  | `ha_call_read_tool` | Execute a `readOnlyHint` tool by name. Safe — clients can auto-approve. |
358
358
  | `ha_call_write_tool` | Execute a write tool that creates or updates data. |
359
359
  | `ha_call_delete_tool` | Execute a tool that removes / deletes data. |
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "8.6.0.dev2985"
7
+ version = "8.6.0.dev2990"
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.dev2985"
7
+ version = "8.6.0.dev2990"
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
@@ -310,7 +310,8 @@ def create_error_response(
310
310
  # Include first suggestion as primary, all suggestions in list
311
311
  error_dict["suggestion"] = error_suggestions[0]
312
312
  if len(error_suggestions) > 1:
313
- error_dict["suggestions"] = error_suggestions
313
+ # A copy: the defaults are module-level lists shared by every call.
314
+ error_dict["suggestions"] = list(error_suggestions)
314
315
 
315
316
  response: dict[str, Any] = {
316
317
  "success": False,
@@ -15,7 +15,8 @@ axis from the global enable/disable in the settings UI:
15
15
  For embedded servers with the Home Assistant LLM API enabled, the single
16
16
  source of truth travels **in-band**: :class:`LlmExposureMiddleware` stamps
17
17
  every ``tools/list`` entry with
18
- ``_meta.ha_mcp = {"llm_api_exposed": bool, "pinned": bool, "policy": {...}}``
18
+ ``_meta.ha_mcp = {"llm_api_exposed": bool, "pinned": bool, "params": str,
19
+ "policy": {...}}``
19
20
  so the component (one more loopback MCP client) filters on data that can never
20
21
  drift from the server's settings, with zero extra round-trips. The ``policy``
21
22
  block reports the serving server's gating state (#1990 — see META_POLICY_KEY). Stamping re-reads the
@@ -51,6 +52,10 @@ logger = logging.getLogger(__name__)
51
52
  META_NAMESPACE = "ha_mcp"
52
53
  META_EXPOSED_KEY = "llm_api_exposed"
53
54
  META_PINNED_KEY = "pinned"
55
+ # The one-line parameter summary the component's search hits show (#2633).
56
+ # Rendered here so the component, which cannot import this package, carries
57
+ # no copy of the renderer.
58
+ META_PARAMS_KEY = "params"
54
59
 
55
60
  # Serving-server policy/identity block stamped alongside the per-tool keys
56
61
  # (#1990). A client (or a debugging agent) reading tools/list can see the
@@ -267,6 +272,8 @@ class LlmExposureMiddleware(Middleware):
267
272
  call_next: CallNext[mt.ListToolsRequest, Sequence[Tool]],
268
273
  ) -> Sequence[Tool]:
269
274
  """Stamp ``_meta.ha_mcp`` on every tool in the list result."""
275
+ from .transforms.compact_params import compact_params
276
+
270
277
  tools = await call_next(context)
271
278
  overrides, pinned = self._current_settings()
272
279
  policy_block = self._policy_block()
@@ -279,6 +286,7 @@ class LlmExposureMiddleware(Middleware):
279
286
  tool.name, tool.tags or set(), overrides
280
287
  )
281
288
  namespace[META_PINNED_KEY] = tool.name in pinned
289
+ namespace[META_PARAMS_KEY] = compact_params(tool.parameters)
282
290
  namespace[META_POLICY_KEY] = policy_block
283
291
  meta[META_NAMESPACE] = namespace
284
292
  stamped.append(tool.model_copy(update={"meta": meta}))
@@ -348,6 +348,17 @@ def read_only_visible(tool: Tool) -> bool:
348
348
  def _raise_read_only_error(
349
349
  name: str, *, blocked_operation: str | None = None, allowed: str | None = None
350
350
  ) -> NoReturn:
351
+ raise_tool_error(
352
+ read_only_error_response(
353
+ name, blocked_operation=blocked_operation, allowed=allowed
354
+ )
355
+ )
356
+
357
+
358
+ def read_only_error_response(
359
+ name: str, *, blocked_operation: str | None = None, allowed: str | None = None
360
+ ) -> dict[str, Any]:
361
+ """The structured ``READ_ONLY_MODE`` error for a blocked call to *name*."""
351
362
  context: dict[str, Any] = {"tool_name": name, "read_only_mode": True}
352
363
  if blocked_operation is not None:
353
364
  context["blocked_operation"] = blocked_operation
@@ -364,17 +375,15 @@ def _raise_read_only_error(
364
375
  f"'{name}' is a write-capable tool, so the call was blocked — "
365
376
  f"no changes were made."
366
377
  )
367
- raise_tool_error(
368
- create_error_response(
369
- ErrorCode.READ_ONLY_MODE,
370
- message,
371
- suggestions=[
372
- "Continue with read-only tools — searching, getting, and "
373
- + "listing data all remain available.",
374
- read_only_remedy_hint(),
375
- ],
376
- context=context,
377
- )
378
+ return create_error_response(
379
+ ErrorCode.READ_ONLY_MODE,
380
+ message,
381
+ suggestions=[
382
+ "Continue with read-only tools — searching, getting, and "
383
+ + "listing data all remain available.",
384
+ read_only_remedy_hint(),
385
+ ],
386
+ context=context,
378
387
  )
379
388
 
380
389
 
@@ -9,9 +9,10 @@ from __future__ import annotations
9
9
 
10
10
  # Description for the unified search tool
11
11
  SEARCH_TOOL_DESCRIPTION = (
12
- "Search ALL Home Assistant tools by ENGLISH keyword. Returns matching "
13
- "tools with descriptions, parameters, and annotations "
14
- "(read/write/delete). Categories: entities, states, automations, "
12
+ "Search ALL Home Assistant tools by ENGLISH keyword. Each hit is "
13
+ "compact: name, one-line description, a one-line params list (types, "
14
+ "enum values, required), and the proxy that executes it. Categories: "
15
+ "entities, states, automations, "
15
16
  "scripts, dashboards, helpers, HACS, calendar, zones, labels, groups, "
16
17
  "areas, floors, history, statistics, devices, integrations, services, "
17
18
  "backups, todo, camera, blueprints, system, and more.\n\n"
@@ -20,13 +21,17 @@ SEARCH_TOOL_DESCRIPTION = (
20
21
  "(pinned: true); use the schema you already have.\n\n"
21
22
  "WORKFLOW:\n"
22
23
  "1. ha_search_tools(query='...') \u2014 find tools (this tool)\n"
23
- "2. Execute: call the tool DIRECTLY by name (preferred), or use "
24
+ "2. ha_search_tools(tools=['<name>']) \u2014 full description and input "
25
+ "schema of the tool(s) you will call. Do this BEFORE calling: the compact "
26
+ "hit omits usage guidance, nested fields, defaults and parameter "
27
+ "descriptions.\n"
28
+ "3. Execute: call the tool DIRECTLY by name (preferred), or use "
24
29
  "a proxy for permission gating:\n"
25
30
  " - ha_call_read_tool \u2014 readOnlyHint tools (safe, no side effects)\n"
26
31
  " - ha_call_write_tool \u2014 destructiveHint tools that create/update\n"
27
32
  " - ha_call_delete_tool \u2014 destructiveHint tools that remove/delete\n"
28
- "Once you know a tool name, call it directly \u2014 no need to search "
29
- "again.\n\n"
33
+ "Once you hold a tool's full schema, call it directly \u2014 no need to "
34
+ "repeat the keyword search or the schema lookup.\n\n"
30
35
  "If using proxies, call with TWO top-level params:\n"
31
36
  ' ha_call_read_tool(name="ha_search", arguments={"query": "..."})\n'
32
37
  " Do NOT nest name/arguments inside the arguments param.\n"
@@ -40,8 +45,9 @@ SEARCH_TOOL_DESCRIPTION = (
40
45
  TOOL_DISCOVERY_INSTRUCTIONS = (
41
46
  "\n\n## Tool Discovery\n"
42
47
  "Tools already in your tool list are callable directly — "
43
- "do not search for them. Once you know any tool’s name, "
44
- "call it directly; never search for the same tool twice.\n\n"
48
+ "do not search for them. Once you hold a tool’s full schema, "
49
+ "call it directly; repeat neither the keyword search nor the "
50
+ "schema lookup for the same tool.\n\n"
45
51
  "Most other tools are NOT listed directly — use "
46
52
  "ha_search_tools to find them.\n\n"
47
53
  "WORKFLOW:\n"
@@ -49,8 +55,10 @@ TOOL_DISCOVERY_INSTRUCTIONS = (
49
55
  "naming the operation (e.g. 'get entity state'). Translate "
50
56
  "other languages first; entity, area and device names keep "
51
57
  "their original spelling.\n"
52
- "2. Results include name, description, parameters, and "
53
- "annotations (readOnlyHint/destructiveHint). A tool already "
58
+ "2. Results are compact: name, one-line description, a one-line "
59
+ "params list and the proxy to use. Before calling, fetch the full "
60
+ "description and input schema with ha_search_tools(tools=['<name>']). "
61
+ "A tool already "
54
62
  "in your list comes back as a name-only stub (pinned: true) "
55
63
  "— use the schema you already have.\n"
56
64
  "3. Execute the discovered tool — two options:\n"
@@ -78,9 +78,13 @@ async def _execute_legacy_update(
78
78
  {**body, "type": f"{helper_type}/update", f"{helper_type}_id": unique_id}
79
79
  )
80
80
  if not result.get("success"):
81
+ code = ws_failure_code(result)
82
+ if code is ErrorCode.RESOURCE_NOT_FOUND:
83
+ # The item vanished after _stored_item read it; report it the same way.
84
+ code = ErrorCode.CONFIG_NOT_FOUND
81
85
  raise_tool_error(
82
86
  create_error_response(
83
- ws_failure_code(result),
87
+ code,
84
88
  f"Failed to update {helper_type} config: "
85
89
  f"{result.get('error', 'Unknown error')}",
86
90
  context=_simple_helper_error_context(helper_type, entity_id=entity_id),
@@ -0,0 +1,400 @@
1
+ """Resolve the helper behind an entity_id for ha_remove_helpers_integrations."""
2
+
3
+ import logging
4
+ from typing import Any, Literal, NoReturn
5
+
6
+ from ..client.rest_client import (
7
+ HomeAssistantAPIError,
8
+ HomeAssistantAuthError,
9
+ HomeAssistantConnectionError,
10
+ )
11
+ from ..errors import ErrorCode, create_error_response
12
+ from .config_entry_flow import FLOW_HELPER_TYPES
13
+ from .config_helpers.schemas import SIMPLE_HELPER_TYPES
14
+ from .helpers import raise_tool_error, ws_failure_code
15
+
16
+ logger = logging.getLogger(__name__)
17
+
18
+ YAML_HELPER_REMOVAL = (
19
+ "YAML-configured helpers must be removed by editing the configuration file."
20
+ )
21
+ YAML_HELPER_SUGGESTION = "Edit the YAML file and reload the relevant integration."
22
+
23
+ FlowLookupReason = Literal[
24
+ "ok",
25
+ "wrong_helper_type",
26
+ "bare_id_not_supported",
27
+ "not_in_registry",
28
+ "not_registry_managed",
29
+ "no_config_entry",
30
+ "lookup_failed",
31
+ ]
32
+
33
+
34
+ async def _read_registry_entry(
35
+ client: Any, entity_id: str, warnings: list[str] | None = None
36
+ ) -> tuple[dict[str, Any] | None, FlowLookupReason]:
37
+ """Read ``entity_id``'s entity-registry entry, or ``(None, reason)``.
38
+
39
+ ``reason`` is ``lookup_failed`` for an OSError/TimeoutError from the
40
+ WebSocket send. On Core's ``not_found`` the entity's state decides between
41
+ ``not_registry_managed`` and ``not_in_registry``. A ``success: false``
42
+ reply other than ``not_found``, and a reply without an entry, raise a
43
+ ToolError: neither proves the entity is absent. HomeAssistantConnectionError, HomeAssistantAuthError
44
+ and a non-404 HomeAssistantAPIError from the state read propagate to the
45
+ caller's except chain.
46
+ """
47
+ try:
48
+ result = await client.send_websocket_message(
49
+ {"type": "config/entity_registry/get", "entity_id": entity_id}
50
+ )
51
+ except (HomeAssistantConnectionError, HomeAssistantAuthError):
52
+ # Typed errors must reach the outer handler — do not swallow.
53
+ raise
54
+ except (OSError, TimeoutError) as e:
55
+ # Network / transport errors from the WS layer (ConnectionError,
56
+ # BrokenPipeError, TimeoutError, …). Programmer-bug-shape
57
+ # exceptions (KeyError, AttributeError, TypeError) intentionally
58
+ # propagate — the response is shape-checked at the dict guard
59
+ # below, and catching them here would mask the bug as a
60
+ # transient WEBSOCKET_DISCONNECTED.
61
+ logger.debug(f"entity_registry/get failed for {entity_id}: {e}")
62
+ if warnings is not None:
63
+ warnings.append(f"entity_registry/get failed for {entity_id}: {e}")
64
+ return None, "lookup_failed"
65
+
66
+ if not isinstance(result, dict):
67
+ _raise_unexpected_registry_reply(entity_id, result)
68
+ if not result.get("success"):
69
+ # Core answers an unknown entity with not_found; any other failure (a
70
+ # proxy block, a malformed request) is no evidence of absence.
71
+ if result.get("error_code") != "not_found":
72
+ raise_tool_error(
73
+ create_error_response(
74
+ ws_failure_code(result),
75
+ f"Reading the entity registry for {entity_id} failed: "
76
+ f"{result.get('error') or 'unknown error'}",
77
+ context={"entity_id": entity_id},
78
+ suggestions=result.get("suggestions"),
79
+ )
80
+ )
81
+ return None, await _absence_reason(client, entity_id)
82
+
83
+ entry = result.get("result")
84
+ if not isinstance(entry, dict) or not entry:
85
+ _raise_unexpected_registry_reply(entity_id, entry)
86
+ return entry, "ok"
87
+
88
+
89
+ def _raise_unexpected_registry_reply(entity_id: str, reply: Any) -> NoReturn:
90
+ raise_tool_error(
91
+ create_error_response(
92
+ ErrorCode.SERVICE_CALL_FAILED,
93
+ (
94
+ f"Reading the entity registry for {entity_id} returned no "
95
+ f"entry ({type(reply).__name__}). Nothing was deleted."
96
+ ),
97
+ context={"entity_id": entity_id},
98
+ )
99
+ )
100
+
101
+
102
+ async def _absence_reason(client: Any, entity_id: str) -> FlowLookupReason:
103
+ """Tell an entity Core keeps no registry entry for from a missing one.
104
+
105
+ Core registers only entities with a ``unique_id``; one without it (a YAML
106
+ template sensor without unique_id, ``zone.home``) still has a state. A
107
+ state read failing with a status other than 404 propagates.
108
+ """
109
+ try:
110
+ state = await client.get_entity_state(entity_id)
111
+ except HomeAssistantAPIError as e:
112
+ if e.status_code != 404:
113
+ raise
114
+ state = None
115
+ return "not_registry_managed" if state else "not_in_registry"
116
+
117
+
118
+ def raise_unregistered_entity_error(
119
+ target: str, helper_type: str | None, entity_id: str
120
+ ) -> NoReturn:
121
+ """Refuse an entity that has a state but no entity-registry entry."""
122
+ raise_tool_error(
123
+ create_error_response(
124
+ ErrorCode.RESOURCE_NOT_FOUND,
125
+ (
126
+ f"{entity_id} has a state but no entity registry entry, so it "
127
+ "is not managed through the registry and cannot be removed "
128
+ "here. Nothing was deleted."
129
+ ),
130
+ context={
131
+ "target": target,
132
+ "helper_type": helper_type,
133
+ "entity_id": entity_id,
134
+ },
135
+ suggestions=[
136
+ (
137
+ "Remove it where it is defined, e.g. delete it from its "
138
+ "YAML file and reload that integration."
139
+ ),
140
+ (
141
+ "Entities Home Assistant builds from its core "
142
+ "configuration, such as zone.home, cannot be removed."
143
+ ),
144
+ ],
145
+ )
146
+ )
147
+
148
+
149
+ async def get_entry_id_for_flow_helper(
150
+ client: Any,
151
+ helper_type: str,
152
+ target: str,
153
+ warnings: list[str] | None = None,
154
+ ) -> tuple[str | None, FlowLookupReason]:
155
+ """Resolve a flow-helper target to its config_entry_id via entity_registry.
156
+
157
+ Used by ha_remove_helpers_integrations when target is an entity_id
158
+ (contains a '.') and helper_type is a known flow-helper type.
159
+
160
+ Args:
161
+ client: HomeAssistantClient instance.
162
+ helper_type: Flow-helper type (must be in FLOW_HELPER_TYPES).
163
+ target: Full entity_id, e.g. "sensor.my_meter". Bare IDs not
164
+ supported for flow helpers (caller must provide entity_id).
165
+ warnings: Optional list — appended to on WebSocket failure.
166
+
167
+ Returns:
168
+ Tuple of (config_entry_id, reason). On success: (entry_id, "ok").
169
+ On failure: (None, reason) where reason discriminates the cause so
170
+ the caller can produce an accurate error response without an extra
171
+ WebSocket round-trip.
172
+
173
+ Raises:
174
+ ToolError: the entity belongs to another integration than
175
+ helper_type, or the registry read failed for a reason other than
176
+ ``not_found``.
177
+ HomeAssistantConnectionError, HomeAssistantAuthError: propagated.
178
+ HomeAssistantAPIError: the state read that tells an unregistered
179
+ entity from a missing one failed with a status other than 404.
180
+ """
181
+ if helper_type not in FLOW_HELPER_TYPES:
182
+ return None, "wrong_helper_type"
183
+
184
+ if "." not in target:
185
+ return None, "bare_id_not_supported"
186
+
187
+ entry, reason = await _read_registry_entry(client, target, warnings)
188
+ if entry is None:
189
+ return None, reason
190
+
191
+ # A helper's entities are registered under its own integration, so a
192
+ # foreign platform means the config_entry_id belongs to another integration.
193
+ platform = entry.get("platform")
194
+ if platform != helper_type:
195
+ _raise_platform_mismatch(target, helper_type, platform)
196
+
197
+ config_entry_id = entry.get("config_entry_id")
198
+ if not config_entry_id:
199
+ return None, "no_config_entry"
200
+ return config_entry_id, "ok"
201
+
202
+
203
+ def _raise_platform_mismatch(target: str, helper_type: str, platform: Any) -> NoReturn:
204
+ """Refuse an explicit flow-helper type that the entity's registry
205
+ platform contradicts, naming the platform so the caller can tell whether
206
+ omitting helper_type can work."""
207
+ if platform in SIMPLE_HELPER_TYPES or platform in FLOW_HELPER_TYPES:
208
+ retry = f"Pass helper_type='{platform}', or omit helper_type."
209
+ else:
210
+ retry = (
211
+ f"Omit helper_type only if '{platform}' is a helper integration; "
212
+ "otherwise use ha_remove_entity() to remove just this entity, or "
213
+ "pass the integration's config entry_id as target."
214
+ )
215
+ raise_tool_error(
216
+ create_error_response(
217
+ ErrorCode.VALIDATION_INVALID_PARAMETER,
218
+ (
219
+ f"{target} is not a {helper_type} helper: it belongs to the "
220
+ f"'{platform}' integration. Nothing was deleted."
221
+ ),
222
+ context={
223
+ "target": target,
224
+ "helper_type": helper_type,
225
+ "platform": platform,
226
+ },
227
+ suggestions=[retry],
228
+ )
229
+ )
230
+
231
+
232
+ def raise_flow_helper_lookup_error(
233
+ reason: FlowLookupReason,
234
+ helper_type: str | None,
235
+ target: str,
236
+ detail: str | None = None,
237
+ ) -> NoReturn:
238
+ """Raise the structured error for a failed flow-helper entry_id lookup.
239
+
240
+ ``reason`` discriminates the failure mode without a second WebSocket
241
+ round-trip. The lookup helper already queried the registry; the response
242
+ told us everything we need.
243
+ """
244
+ entity_id = target if "." in target else f"{helper_type}.{target}"
245
+ if reason == "not_registry_managed":
246
+ raise_unregistered_entity_error(target, helper_type, entity_id)
247
+ if reason == "no_config_entry":
248
+ raise_tool_error(
249
+ create_error_response(
250
+ ErrorCode.RESOURCE_NOT_FOUND,
251
+ (
252
+ f"Helper {target} is not a storage-based helper "
253
+ f"(no config entry). {YAML_HELPER_REMOVAL}"
254
+ ),
255
+ context={
256
+ "target": target,
257
+ "helper_type": helper_type,
258
+ "entity_id": entity_id,
259
+ },
260
+ suggestions=[YAML_HELPER_SUGGESTION],
261
+ )
262
+ )
263
+ if reason == "lookup_failed":
264
+ # Registry WebSocket call failed transiently. Surface as
265
+ # a connectivity error so the caller knows to retry,
266
+ # rather than chasing a non-existent entity_id.
267
+ raise_tool_error(
268
+ create_error_response(
269
+ ErrorCode.WEBSOCKET_DISCONNECTED,
270
+ (
271
+ f"Registry lookup for {entity_id} failed due to a "
272
+ f"WebSocket error{f': {detail}' if detail else '.'}"
273
+ ),
274
+ context={
275
+ "target": target,
276
+ "helper_type": helper_type,
277
+ "entity_id": entity_id,
278
+ },
279
+ )
280
+ )
281
+ # wrong_helper_type cannot occur here because the dispatcher
282
+ # already checked SIMPLE_HELPER_TYPES / FLOW_HELPER_TYPES; the
283
+ # assertion enforces that contract at runtime.
284
+ assert reason != "wrong_helper_type"
285
+ if reason == "not_in_registry":
286
+ # Target is absent from the entity registry and has no
287
+ # state. Surface as ENTITY_NOT_FOUND (entity-shaped target) so the
288
+ # caller learns the identifier is unusable — the typo
289
+ # case is the failure mode "absent → success" would
290
+ # silently mask. Matches the bare_id_not_supported
291
+ # branch below and sibling ha_remove_entity.
292
+ raise_tool_error(
293
+ create_error_response(
294
+ ErrorCode.ENTITY_NOT_FOUND,
295
+ (
296
+ f"Helper {target} not found in entity "
297
+ f"registry (looked up as {entity_id}). "
298
+ "May indicate it was already removed, "
299
+ "never existed, or the identifier is a "
300
+ "typo. Verify with ha_search() "
301
+ "before retrying."
302
+ ),
303
+ context={
304
+ "target": target,
305
+ "helper_type": helper_type,
306
+ "entity_id": entity_id,
307
+ },
308
+ suggestions=[
309
+ "Use ha_search() — flow helper "
310
+ "types often expose entities under a "
311
+ "different domain than the helper_type "
312
+ "itself (e.g. utility_meter → sensor.*, "
313
+ "switch_as_x → switch.* / light.*)."
314
+ if helper_type
315
+ else "Find the entity_id with ha_search().",
316
+ ],
317
+ )
318
+ )
319
+ # bare_id_not_supported → caller passed a bare ID where an
320
+ # entity_id was required. That's a call-shape error, not
321
+ # missing-target; surface as ENTITY_NOT_FOUND with the
322
+ # search suggestion so the caller can self-correct.
323
+ raise_tool_error(
324
+ create_error_response(
325
+ ErrorCode.ENTITY_NOT_FOUND,
326
+ (
327
+ f"Helper {target} not found in entity registry "
328
+ f"(looked up as {entity_id})."
329
+ ),
330
+ context={
331
+ "target": target,
332
+ "helper_type": helper_type,
333
+ "entity_id": entity_id,
334
+ },
335
+ suggestions=[
336
+ "For a config entry_id target, omit helper_type to delete it.",
337
+ (
338
+ "Otherwise find the entity_id with ha_search(): flow "
339
+ "helpers often use another domain (utility_meter → sensor.*)."
340
+ ),
341
+ ],
342
+ )
343
+ )
344
+
345
+
346
+ async def resolve_helper_entity(client: Any, entity_id: str) -> tuple[str | None, str]:
347
+ """Return the ``(helper_type, target)`` that removes the helper behind ``entity_id``.
348
+
349
+ The registry ``platform`` names the integration that owns the entity. A
350
+ helper Core lists as a helper flow but not in FLOW_HELPER_TYPES (``otp``,
351
+ custom integrations) comes back as ``(None, config_entry_id)``: a direct
352
+ entry delete. An entity of any other integration is refused.
353
+ """
354
+ warnings: list[str] = []
355
+ entry, reason = await _read_registry_entry(client, entity_id, warnings)
356
+ if entry is None:
357
+ raise_flow_helper_lookup_error(
358
+ reason, None, entity_id, detail="; ".join(warnings) or None
359
+ )
360
+ platform = entry.get("platform")
361
+ if platform in SIMPLE_HELPER_TYPES or platform in FLOW_HELPER_TYPES:
362
+ return platform, entity_id
363
+ if platform in await _helper_flow_domains(client):
364
+ config_entry_id = entry.get("config_entry_id")
365
+ if not config_entry_id:
366
+ raise_flow_helper_lookup_error("no_config_entry", platform, entity_id)
367
+ return None, config_entry_id
368
+ raise_tool_error(
369
+ create_error_response(
370
+ ErrorCode.VALIDATION_INVALID_PARAMETER,
371
+ (
372
+ f"{entity_id} belongs to the '{platform}' integration, which "
373
+ "is not a helper. Nothing was deleted."
374
+ ),
375
+ context={"target": entity_id, "platform": platform},
376
+ suggestions=[
377
+ "To remove only this entity, use ha_remove_entity().",
378
+ (
379
+ "To delete the integration's config entry, pass its "
380
+ "entry_id as target."
381
+ ),
382
+ ],
383
+ )
384
+ )
385
+ return None # py/mixed-returns: explicit terminal; error handlers above always raise (NoReturn), unreachable
386
+
387
+
388
+ async def _helper_flow_domains(client: Any) -> frozenset[str]:
389
+ """Core's helper flows plus custom integrations of integration_type helper."""
390
+ domains = await client._request(
391
+ "GET", "/config/config_entries/flow_handlers", params={"type": "helper"}
392
+ )
393
+ # _request answers an unparseable body with {}; an empty set would refuse
394
+ # every helper outside the static lists as "not a helper".
395
+ if not isinstance(domains, list):
396
+ raise HomeAssistantConnectionError(
397
+ "flow_handlers returned an unexpected response shape: "
398
+ f"{type(domains).__name__}"
399
+ )
400
+ return frozenset(domains)
@@ -705,9 +705,13 @@ async def safe_progress(
705
705
 
706
706
 
707
707
  def ws_failure_code(result: dict[str, Any]) -> ErrorCode:
708
- """Core answers a schema-invalid write with ``invalid_format``: the caller's input."""
709
- if result.get("error_code") == "invalid_format":
708
+ """Map Core's WS error code: ``invalid_format`` is the caller's input,
709
+ ``not_found`` an item Core does not hold (e.g. a YAML-configured helper)."""
710
+ code = result.get("error_code")
711
+ if code == "invalid_format":
710
712
  return ErrorCode.VALIDATION_INVALID_PARAMETER
713
+ if code == "not_found":
714
+ return ErrorCode.RESOURCE_NOT_FOUND
711
715
  return ErrorCode.SERVICE_CALL_FAILED
712
716
 
713
717