ha-mcp-dev 8.6.0.dev3006__tar.gz → 8.6.0.dev3007__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 (780) hide show
  1. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/PKG-INFO +1 -1
  2. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/pyproject.toml +1 -1
  3. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/pyproject.toml.orig +1 -1
  4. ha_mcp_dev-8.6.0.dev3007/src/ha_mcp/backup_integrations.py +49 -0
  5. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/backup_manager.py +94 -94
  6. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/client/rest_client.py +14 -14
  7. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/client/websocket_client.py +13 -13
  8. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/server_tool_text.py +1 -1
  9. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/settings_ui/_handlers_backups.py +4 -2
  10. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/backup.py +16 -17
  11. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/backup_on_demand.py +6 -2
  12. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/config_entry_backup.py +36 -5
  13. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/config_entry_flow.py +3 -50
  14. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/config_helpers/describe.py +4 -3
  15. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/config_helpers/listing.py +65 -9
  16. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/config_helpers/registry.py +2 -2
  17. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/config_helpers/schemas.py +20 -19
  18. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/flow_helper_lookup.py +18 -33
  19. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/hacs_registration.py +8 -0
  20. ha_mcp_dev-8.6.0.dev3007/src/ha_mcp/tools/helper_flows.py +112 -0
  21. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/helpers.py +30 -0
  22. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/log_common.py +5 -4
  23. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/search/component.py +10 -4
  24. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/smart_search/_deep.py +41 -43
  25. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/tools_config_automations.py +11 -17
  26. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/tools_config_helpers.py +43 -81
  27. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/tools_config_scenes.py +2 -11
  28. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/tools_config_scripts.py +6 -14
  29. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/tools_groups.py +2 -11
  30. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/tools_integrations.py +60 -121
  31. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/ws_waiters.py +31 -1
  32. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/LICENSE +0 -0
  33. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/README.md +0 -0
  34. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/__init__.py +0 -0
  35. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/__main__.py +0 -0
  36. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_pypi_marker +0 -0
  37. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_rich_compat.py +0 -0
  38. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/__init__.py +0 -0
  39. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
  40. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
  41. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
  42. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
  43. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
  44. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
  45. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
  46. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
  47. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
  48. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
  49. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
  50. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
  51. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
  52. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
  53. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
  54. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
  55. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
  56. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
  57. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
  58. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
  59. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
  60. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
  61. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
  62. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
  63. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
  64. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
  65. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
  66. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
  67. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
  68. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
  69. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
  70. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
  71. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
  72. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
  73. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
  74. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
  75. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
  76. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
  77. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
  78. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
  79. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
  80. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
  81. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
  82. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
  83. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
  84. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
  85. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
  86. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
  87. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
  88. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
  89. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
  90. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
  91. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
  92. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
  93. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
  94. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
  95. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
  96. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
  97. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
  98. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
  99. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
  100. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
  101. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
  102. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
  103. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
  104. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
  105. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
  106. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
  107. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
  108. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
  109. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
  110. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
  111. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
  112. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
  113. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
  114. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
  115. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
  116. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
  117. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
  118. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
  119. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
  120. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
  121. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
  122. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
  123. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
  124. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
  125. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
  126. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
  127. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
  128. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
  129. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
  130. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
  131. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
  132. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
  133. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
  134. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
  135. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
  136. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/jev_search.py +0 -0
  137. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
  138. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
  139. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
  140. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
  141. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
  142. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
  143. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
  144. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
  145. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
  146. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
  147. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
  148. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
  149. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
  150. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
  151. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
  152. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
  153. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
  154. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
  155. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
  156. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
  157. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
  158. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
  159. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
  160. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
  161. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
  162. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
  163. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
  164. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
  165. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
  166. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
  167. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
  168. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
  169. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
  170. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
  171. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
  172. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
  173. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
  174. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
  175. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
  176. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
  177. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
  178. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
  179. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
  180. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
  181. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
  182. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
  183. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
  184. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
  185. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
  186. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
  187. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
  188. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
  189. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
  190. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
  191. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
  192. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
  193. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
  194. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
  195. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
  196. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
  197. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
  198. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
  199. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
  200. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
  201. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
  202. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
  203. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
  204. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
  205. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
  206. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
  207. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
  208. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
  209. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
  210. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
  211. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
  212. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
  213. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
  214. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
  215. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
  216. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
  217. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
  218. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
  219. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
  220. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
  221. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
  222. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
  223. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
  224. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
  225. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
  226. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
  227. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
  228. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
  229. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
  230. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
  231. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
  232. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
  233. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
  234. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
  235. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
  236. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
  237. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
  238. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
  239. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
  240. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
  241. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
  242. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
  243. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
  244. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
  245. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
  246. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
  247. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
  248. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
  249. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
  250. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
  251. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
  252. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
  253. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
  254. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
  255. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
  256. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
  257. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
  258. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
  259. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
  260. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
  261. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
  262. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
  263. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
  264. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
  265. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
  266. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
  267. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
  268. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
  269. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
  270. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
  271. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
  272. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
  273. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
  274. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
  275. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
  276. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
  277. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
  278. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
  279. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
  280. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
  281. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
  282. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
  283. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
  284. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
  285. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
  286. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
  287. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
  288. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
  289. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
  290. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
  291. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
  292. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
  293. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
  294. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
  295. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
  296. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
  297. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
  298. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
  299. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
  300. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
  301. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
  302. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
  303. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
  304. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
  305. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
  306. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
  307. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
  308. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
  309. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
  310. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
  311. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
  312. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
  313. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
  314. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
  315. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
  316. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
  317. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
  318. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
  319. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
  320. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
  321. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
  322. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
  323. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
  324. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
  325. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
  326. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
  327. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
  328. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
  329. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
  330. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
  331. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
  332. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
  333. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
  334. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
  335. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
  336. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
  337. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
  338. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
  339. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
  340. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
  341. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
  342. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
  343. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
  344. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
  345. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
  346. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
  347. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
  348. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
  349. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
  350. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
  351. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
  352. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
  353. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
  354. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
  355. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
  356. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
  357. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
  358. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
  359. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
  360. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
  361. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
  362. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
  363. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
  364. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
  365. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
  366. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
  367. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
  368. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
  369. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
  370. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
  371. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
  372. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
  373. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
  374. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
  375. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
  376. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
  377. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
  378. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
  379. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
  380. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
  381. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
  382. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
  383. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
  384. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
  385. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
  386. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
  387. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
  388. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
  389. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
  390. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
  391. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
  392. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
  393. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
  394. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
  395. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
  396. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
  397. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
  398. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
  399. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
  400. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
  401. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
  402. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
  403. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
  404. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
  405. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
  406. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
  407. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
  408. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
  409. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
  410. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
  411. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
  412. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
  413. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
  414. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
  415. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
  416. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
  417. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
  418. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
  419. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
  420. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
  421. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
  422. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
  423. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
  424. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
  425. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
  426. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
  427. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
  428. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
  429. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
  430. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
  431. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
  432. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
  433. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
  434. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
  435. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
  436. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
  437. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
  438. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
  439. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
  440. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
  441. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
  442. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
  443. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
  444. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
  445. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
  446. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
  447. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
  448. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
  449. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
  450. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/requirements.txt +0 -0
  451. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
  452. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
  453. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
  454. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
  455. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
  456. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
  457. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
  458. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
  459. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
  460. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
  461. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
  462. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
  463. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
  464. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/client.py +0 -0
  465. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
  466. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
  467. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
  468. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
  469. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
  470. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
  471. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
  472. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
  473. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
  474. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
  475. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
  476. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
  477. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
  478. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
  479. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
  480. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
  481. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
  482. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
  483. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
  484. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
  485. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
  486. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
  487. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/server.py +0 -0
  488. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
  489. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
  490. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
  491. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
  492. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
  493. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
  494. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
  495. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
  496. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
  497. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
  498. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
  499. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
  500. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
  501. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
  502. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
  503. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
  504. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
  505. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
  506. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_vendor/websockets/version.py +0 -0
  507. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/_version.py +0 -0
  508. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/app_discovery.py +0 -0
  509. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/auth/__init__.py +0 -0
  510. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/auth/consent_form.py +0 -0
  511. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/auth/oidc_compat.py +0 -0
  512. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/auth/provider.py +0 -0
  513. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/backup_diff.py +0 -0
  514. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/backup_entity_ids.py +0 -0
  515. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/backup_tags.py +0 -0
  516. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/browser_landing.py +0 -0
  517. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/client/__init__.py +0 -0
  518. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/client/admin_routes.py +0 -0
  519. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/client/supervisor_client.py +0 -0
  520. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/client/websocket_listener.py +0 -0
  521. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/config.py +0 -0
  522. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/config_backup.py +0 -0
  523. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/config_meta.py +0 -0
  524. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/config_overrides.py +0 -0
  525. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/config_registry.py +0 -0
  526. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/config_settings.py +0 -0
  527. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
  528. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
  529. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
  530. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
  531. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
  532. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
  533. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/errors.py +0 -0
  534. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/ha_request_queue.py +0 -0
  535. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/hacs_auto_refresh.py +0 -0
  536. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/http_transport.py +0 -0
  537. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/image_info.py +0 -0
  538. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/llm_exposure.py +0 -0
  539. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/log_filters.py +0 -0
  540. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/policy/__init__.py +0 -0
  541. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/policy/approval_queue.py +0 -0
  542. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/policy/decision_pin.py +0 -0
  543. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/policy/decisions.py +0 -0
  544. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/policy/editing.py +0 -0
  545. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/policy/evaluator.py +0 -0
  546. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/policy/events.py +0 -0
  547. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/policy/handlers.py +0 -0
  548. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/policy/middleware.py +0 -0
  549. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/policy/model.py +0 -0
  550. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/policy/mrtr.py +0 -0
  551. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/policy/persistence.py +0 -0
  552. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/policy/server_channels.py +0 -0
  553. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/policy/value_sources.py +0 -0
  554. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/py.typed +0 -0
  555. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/read_only.py +0 -0
  556. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/redaction.py +0 -0
  557. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/renamed_tools.py +0 -0
  558. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  559. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  560. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
  561. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-actions.md +0 -0
  562. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
  563. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
  564. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  565. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  566. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  567. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  568. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  569. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  570. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  571. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
  572. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  573. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/triggers-and-conditions.md +0 -0
  574. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
  575. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/server.py +0 -0
  576. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/server_lifespan.py +0 -0
  577. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/settings_ui/__init__.py +0 -0
  578. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
  579. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
  580. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
  581. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
  582. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
  583. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/settings_ui/_i18n.py +0 -0
  584. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
  585. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/settings_ui/_persistence.py +0 -0
  586. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
  587. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/settings_ui/_theme.py +0 -0
  588. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
  589. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/settings_ui/locales/README.md +0 -0
  590. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/settings_ui/locales/az.json +0 -0
  591. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
  592. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/settings_ui/locales/de.json +0 -0
  593. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/settings_ui/locales/en.json +0 -0
  594. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
  595. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/settings_ui/locales/es.json +0 -0
  596. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
  597. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/settings_ui/locales/it.json +0 -0
  598. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
  599. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
  600. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
  601. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
  602. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
  603. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
  604. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
  605. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
  606. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/settings_ui/settings.css +0 -0
  607. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/settings_ui/settings.html +0 -0
  608. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/settings_ui/settings_js/01_i18n_state.js +0 -0
  609. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/settings_ui/settings_js/02_tools_restart.js +0 -0
  610. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/settings_ui/settings_js/03_render_save.js +0 -0
  611. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/settings_ui/settings_js/04_backups.js +0 -0
  612. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/settings_ui/settings_js/05_feature_flags.js +0 -0
  613. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/settings_ui/settings_js/06_policy_cards.js +0 -0
  614. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/settings_ui/settings_js/07_policy_actions.js +0 -0
  615. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/settings_ui/settings_js/08_advanced.js +0 -0
  616. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/settings_ui/settings_js/09_prefs_visibility.js +0 -0
  617. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/smoke_test.py +0 -0
  618. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  619. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/strict_bps.py +0 -0
  620. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tool_dispatch.py +0 -0
  621. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/__init__.py +0 -0
  622. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/area_messages.py +0 -0
  623. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/auto_backup.py +0 -0
  624. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/backup_access.py +0 -0
  625. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  626. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/best_practice_result.py +0 -0
  627. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/best_practice_variables.py +0 -0
  628. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/blueprint_sources.py +0 -0
  629. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
  630. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/blueprint_write.py +0 -0
  631. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/bug_report_config.py +0 -0
  632. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/bug_report_templates.py +0 -0
  633. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/bulk_selector.py +0 -0
  634. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/coercion.py +0 -0
  635. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/component_api.py +0 -0
  636. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/component_config_entries.py +0 -0
  637. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/component_config_reads.py +0 -0
  638. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
  639. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/component_devices.py +0 -0
  640. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/component_helper_collections.py +0 -0
  641. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/component_registries.py +0 -0
  642. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
  643. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
  644. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/config_entry_flow_introspect.py +0 -0
  645. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
  646. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
  647. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/config_entry_identity.py +0 -0
  648. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
  649. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
  650. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/config_helpers/__init__.py +0 -0
  651. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/config_helpers/core_payload.py +0 -0
  652. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/config_helpers/create.py +0 -0
  653. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/config_helpers/flow.py +0 -0
  654. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/config_helpers/typed_config.py +0 -0
  655. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/config_helpers/update.py +0 -0
  656. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/config_helpers/validation.py +0 -0
  657. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/config_subentry_restore.py +0 -0
  658. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/config_write_errors.py +0 -0
  659. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/config_write_helpers.py +0 -0
  660. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/core_contract.py +0 -0
  661. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/dashboard_card_describe.py +0 -0
  662. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
  663. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/dashboard_list_checks.py +0 -0
  664. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/dev_backup.py +0 -0
  665. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/device_control.py +0 -0
  666. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/device_enrichment.py +0 -0
  667. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/diagnostics_helpers.py +0 -0
  668. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/energy_preferences.py +0 -0
  669. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/entity_param_parsing.py +0 -0
  670. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/entity_registration.py +0 -0
  671. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/entity_update_fields.py +0 -0
  672. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/error_log_parsing.py +0 -0
  673. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/history_response.py +0 -0
  674. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
  675. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/log_sources.py +0 -0
  676. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/log_sources_fault.py +0 -0
  677. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
  678. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/radio/__init__.py +0 -0
  679. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/radio/base.py +0 -0
  680. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/radio/matter.py +0 -0
  681. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/radio/thread.py +0 -0
  682. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/radio/zigbee.py +0 -0
  683. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/radio/zwave.py +0 -0
  684. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/radio/zwave_parameters.py +0 -0
  685. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/recorder_errors.py +0 -0
  686. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/reference_validator.py +0 -0
  687. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/registry.py +0 -0
  688. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
  689. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/response_helpers.py +0 -0
  690. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/scene_discovery.py +0 -0
  691. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/search/__init__.py +0 -0
  692. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/search/base.py +0 -0
  693. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/search/entities.py +0 -0
  694. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/search/legacy.py +0 -0
  695. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/search/modes.py +0 -0
  696. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/search/overview.py +0 -0
  697. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/search/response.py +0 -0
  698. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/search/state.py +0 -0
  699. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  700. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  701. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  702. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  703. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  704. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
  705. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  706. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  707. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  708. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/statistics_helpers.py +0 -0
  709. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/statistics_resets.py +0 -0
  710. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/system_restart.py +0 -0
  711. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/tool_hints.py +0 -0
  712. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
  713. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/tools_addons.py +0 -0
  714. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/tools_areas.py +0 -0
  715. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
  716. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  717. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  718. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/tools_calendar.py +0 -0
  719. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/tools_camera.py +0 -0
  720. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/tools_categories.py +0 -0
  721. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/tools_code.py +0 -0
  722. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
  723. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
  724. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/tools_dev.py +0 -0
  725. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/tools_energy.py +0 -0
  726. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/tools_entities.py +0 -0
  727. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  728. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/tools_hacs.py +0 -0
  729. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/tools_history.py +0 -0
  730. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/tools_labels.py +0 -0
  731. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/tools_logs.py +0 -0
  732. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/tools_radio.py +0 -0
  733. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/tools_registry.py +0 -0
  734. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/tools_resources.py +0 -0
  735. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/tools_search.py +0 -0
  736. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/tools_security_policy.py +0 -0
  737. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/tools_service.py +0 -0
  738. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/tools_services.py +0 -0
  739. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/tools_system.py +0 -0
  740. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/tools_themes.py +0 -0
  741. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/tools_todo.py +0 -0
  742. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/tools_traces.py +0 -0
  743. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/tools_updates.py +0 -0
  744. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/tools_utility.py +0 -0
  745. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  746. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  747. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
  748. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/tools_zones.py +0 -0
  749. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/util_helpers.py +0 -0
  750. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/tools/validation_middleware.py +0 -0
  751. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/transforms/__init__.py +0 -0
  752. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/transforms/categorized_search.py +0 -0
  753. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/transforms/compact_params.py +0 -0
  754. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/transforms/component_helpers.py +0 -0
  755. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/transforms/component_search.py +0 -0
  756. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  757. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/transforms/write_tool_note.py +0 -0
  758. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/transport_security.py +0 -0
  759. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/update_check.py +0 -0
  760. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/utils/__init__.py +0 -0
  761. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/utils/config_hash.py +0 -0
  762. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/utils/config_write_lock.py +0 -0
  763. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/utils/dashboard_patch.py +0 -0
  764. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/utils/data_paths.py +0 -0
  765. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
  766. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/utils/domain_handlers.py +0 -0
  767. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/utils/entity_membership.py +0 -0
  768. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  769. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  770. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/utils/mcp_client_host.py +0 -0
  771. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/utils/operation_manager.py +0 -0
  772. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/utils/python_sandbox.py +0 -0
  773. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/utils/registry_update_lock.py +0 -0
  774. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/utils/skill_loader.py +0 -0
  775. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/utils/usage_logger.py +0 -0
  776. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/visibility/__init__.py +0 -0
  777. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/visibility/enforcement.py +0 -0
  778. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/visibility/model.py +0 -0
  779. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/src/ha_mcp/visibility/persistence.py +0 -0
  780. {ha_mcp_dev-8.6.0.dev3006 → ha_mcp_dev-8.6.0.dev3007}/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.dev3006
3
+ Version: 8.6.0.dev3007
4
4
  Summary: Home Assistant MCP Server - Complete control of Home Assistant through MCP
5
5
  Keywords: mcp,home-assistant,ai,automation,smart-home
6
6
  Author: Julien
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "8.6.0.dev3006"
7
+ version = "8.6.0.dev3007"
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.dev3006"
7
+ version = "8.6.0.dev3007"
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
@@ -0,0 +1,49 @@
1
+ """Auto-backup handlers for integration config entries.
2
+
3
+ An integration snapshot holds only the entry's metadata and its enabled state, so
4
+ a restore re-applies that state to an entry that still exists and refuses a
5
+ deleted one rather than sending Core a command for an entry it no longer has.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ from typing import Any
11
+
12
+ from .backup_entity_ids import _manager
13
+
14
+
15
+ async def fetch_integration(client: Any, entity_id: str) -> Any:
16
+ bm = _manager()
17
+ items = bm._require_list(
18
+ await bm._ws_send(client, {"type": "config_entries/get"}),
19
+ "config_entries/get",
20
+ )
21
+ for item in items:
22
+ if item.get("entry_id") == entity_id:
23
+ return item
24
+ return None
25
+
26
+
27
+ async def restore_integration(client: Any, entity_id: str, config: Any) -> Any:
28
+ bm = _manager()
29
+ if await fetch_integration(client, entity_id) is None:
30
+ raise bm.BackupRestoreError(
31
+ f"Config entry {entity_id} ({config.get('domain')}) no longer exists. "
32
+ "An integration snapshot holds only the entry's metadata and enabled "
33
+ "state, so it cannot recreate a deleted entry. Nothing was changed; add "
34
+ "the integration again to recover it.",
35
+ reason="entry_deleted",
36
+ suggestions=[
37
+ "Add it again with ha_set_integration, or have the user add it in "
38
+ "the HA UI when it needs their credentials."
39
+ ],
40
+ )
41
+ disabled = config.get("disabled_by") is not None
42
+ return await bm._ws_send(
43
+ client,
44
+ {
45
+ "type": "config_entries/disable",
46
+ "entry_id": entity_id,
47
+ "disabled_by": "user" if disabled else None,
48
+ },
49
+ )
@@ -35,9 +35,9 @@ Domain handlers
35
35
  - ``fetch(client, entity_id) -> config dict`` — read pre-write state
36
36
  - ``restore(client, entity_id, config) -> result`` — re-apply the saved state
37
37
 
38
- One handler per backed-up domain. Helper types each register their own
39
- handler keyed ``helper_<type>`` since each helper type has a distinct
40
- WS endpoint shape.
38
+ One handler per backed-up domain. Storage helper types each register one keyed
39
+ ``helper_<type>``; a flow helper gets one built on each lookup
40
+ (``BackupManager.handler_for``).
41
41
  """
42
42
 
43
43
  from __future__ import annotations
@@ -64,6 +64,7 @@ from typing import Any, Literal, NotRequired, TypedDict
64
64
  import yaml # type: ignore[import-untyped]
65
65
 
66
66
  from ha_mcp._vendor.fastmcp.exceptions import ToolError
67
+ from ha_mcp._vendor.websockets.exceptions import ConnectionClosed
67
68
 
68
69
  from .backup_diff import (
69
70
  _TEXT_KIND,
@@ -75,6 +76,7 @@ from .backup_diff import (
75
76
  _summarize_patch_counts,
76
77
  )
77
78
  from .backup_entity_ids import _restore_entity_ids
79
+ from .backup_integrations import fetch_integration, restore_integration
78
80
  from .backup_tags import restore_tag, tag_snapshot
79
81
  from .client.rest_client import (
80
82
  HomeAssistantCommandError,
@@ -108,6 +110,7 @@ _CAPTURE_TRANSIENT_ERRORS: tuple[type[BaseException], ...] = (
108
110
  TimeoutError,
109
111
  asyncio.TimeoutError,
110
112
  ConnectionError,
113
+ ConnectionClosed,
111
114
  yaml.YAMLError,
112
115
  ToolError,
113
116
  )
@@ -140,6 +143,11 @@ class MandatoryBackupError(Exception):
140
143
  # can include configuration values even when wrapped by this class.
141
144
  self.safe_detail = safe_detail
142
145
 
146
+ @property
147
+ def safe_cause(self) -> str:
148
+ """The safe detail, else only the failing exception's class name."""
149
+ return self.safe_detail or type(self.__cause__ or self).__name__
150
+
143
151
 
144
152
  class BackupRestoreError(HomeAssistantError):
145
153
  """A restore outcome whose apply knowledge must survive caller mapping."""
@@ -205,16 +213,22 @@ class _FlowHelperReadError(HomeAssistantError):
205
213
  self.reason = reason
206
214
 
207
215
 
208
- @functools.cache
209
- def _flow_helper_types() -> frozenset[str]:
210
- from .tools.config_entry_flow import FLOW_HELPER_TYPES
211
-
212
- return FLOW_HELPER_TYPES
216
+ class _FlowHelperBackupSkip(_FlowHelperReadError):
217
+ """Nothing to back up: no stored or disclosed options, or no helper flow Core
218
+ lists. Best-effort capture logs it at INFO."""
213
219
 
214
220
 
215
221
  def _is_flow_helper_domain(domain: str) -> bool:
216
- """A ``helper_<type>`` snapshot of a config-entry (flow) helper."""
217
- return domain.startswith("helper_") and domain[7:] in _flow_helper_types()
222
+ """A ``helper_<type>`` snapshot domain of a config-entry (flow) helper.
223
+
224
+ Any type that is neither a storage helper nor a config subentry counts; the
225
+ type itself is not checked here. The tools check it against Core's helper
226
+ flow list (``helper_flows.require_helper_type``; ha_config_set_helper only
227
+ after its auto-backup capture, which checks an uncovered type itself), as
228
+ does ``resolve_config_entry_backup_domain`` for an arbitrary config entry.
229
+ """
230
+ helper_type = domain[7:] if domain.startswith("helper_") else ""
231
+ return helper_type not in ("", *_HELPER_LIST_TYPES, "config_subentry")
218
232
 
219
233
 
220
234
  def _flow_failure_reason(step: str, error: BaseException) -> str:
@@ -506,7 +520,8 @@ def _require_restore_safety(path: Path) -> None:
506
520
  """Check the recovery file after its restore pin closes the deletion race."""
507
521
  if not path.is_file():
508
522
  raise MandatoryBackupError(
509
- "The safety snapshot disappeared before restore; no changes were applied"
523
+ "The safety snapshot disappeared before restore; no changes were applied",
524
+ safe_detail="safety snapshot disappeared",
510
525
  )
511
526
 
512
527
 
@@ -625,17 +640,22 @@ class BackupManager:
625
640
  self._handlers[handler.domain] = handler
626
641
 
627
642
  def handler_for(self, domain: str) -> DomainHandler | None:
628
- return self._handlers.get(domain)
643
+ handler = self._handlers.get(domain)
644
+ if handler is None and _is_flow_helper_domain(domain):
645
+ # Built per call, never registered: a typo stays out of supported_domains().
646
+ handler = _make_flow_helper_handler(domain[7:])
647
+ return handler
629
648
 
630
649
  def supported_domains(self) -> list[str]:
631
- """Return the sorted list of registered backup-domain keys.
650
+ """Return the sorted registered backup-domain keys, plus a placeholder
651
+ for the flow helpers, whose handlers are built on use.
632
652
 
633
653
  Public accessor for callers that need to surface "what domains
634
654
  are supported?" in user-facing error messages (e.g., the
635
655
  ``ha_manage_backup(scope='edits', action='create')`` handler
636
656
  when ``domain`` is unknown). Sorted for stable output.
637
657
  """
638
- return sorted(self._handlers.keys())
658
+ return [*sorted(self._handlers.keys()), "helper_<flow helper type>"]
639
659
 
640
660
  # ----- capture -------------------------------------------------------
641
661
 
@@ -722,8 +742,8 @@ class BackupManager:
722
742
  """Capture a snapshot for ``domain:entity_id`` if throttle elapsed.
723
743
 
724
744
  Returns the Path written or None if skipped. In the default
725
- (best-effort) mode it never raises — all errors are logged at WARNING
726
- and swallowed so the wrapped write can proceed regardless.
745
+ (best-effort) mode it never raises — errors are logged at WARNING (INFO for
746
+ a by-design skip) and swallowed so the wrapped write can proceed regardless.
727
747
 
728
748
  ``mandatory=True`` makes the snapshot a precondition (file/YAML writes,
729
749
  #1579): a *genuine* capture failure — an unusable backup dir, a failed
@@ -823,12 +843,11 @@ class BackupManager:
823
843
  if not entity_id:
824
844
  # Create-mode call with no ID yet — nothing to back up.
825
845
  return None
826
- handler = self._handlers.get(domain)
846
+ handler = self.handler_for(domain)
827
847
  if handler is None:
828
848
  if mandatory:
829
- raise MandatoryBackupError(
830
- f"no auto-backup handler is registered for domain {domain!r}"
831
- )
849
+ message = f"no auto-backup handler is registered for domain {domain!r}"
850
+ raise MandatoryBackupError(message, safe_detail=message)
832
851
  logger.warning(
833
852
  "Auto-backup: no handler registered for domain %r — skipping",
834
853
  domain,
@@ -847,34 +866,33 @@ class BackupManager:
847
866
  ) -> Any:
848
867
  """Fetch the pre-write config; return ``_SNAPSHOT_SKIP`` to skip capture.
849
868
 
850
- A handled transient fetch failure logs a WARNING and returns the
851
- sentinel (or raises ``MandatoryBackupError`` under ``mandatory``); a
852
- fetch that returns None because the entity did not exist logs a DEBUG
853
- and returns the sentinel. Any other value is the config to snapshot.
869
+ A handled transient fetch failure logs a WARNING, a ``_FlowHelperBackupSkip``
870
+ an INFO; both return the sentinel (or raise ``MandatoryBackupError`` under
871
+ ``mandatory``). A fetch that returns None because the entity did not exist
872
+ logs a DEBUG and returns the sentinel. Any other value is the config.
854
873
  """
855
874
  try:
856
875
  config = await handler.fetch(self._client, entity_id)
857
876
  except _CAPTURE_TRANSIENT_ERRORS as err:
858
- # Degraded fetches (a non-list WS envelope from an
859
- # auth-scope change or API drift) raise rather than return
860
- # None — see ``_require_list``. During auto-backup we skip
861
- # the snapshot with a WARNING (operator-visible) instead of
862
- # crashing the pipeline; the same error during a diff/
863
- # restore propagates to the tool layer as a structured
864
- # error. The warning level (vs the debug log below) is what
865
- # distinguishes "fetch broke" from "entity didn't exist".
877
+ # Degraded fetches (a non-list WS envelope from an auth-scope change
878
+ # or API drift) raise rather than return None (``_require_list``).
879
+ # Auto-backup skips the snapshot instead of crashing the pipeline;
880
+ # in a diff/restore the error reaches the tool layer. WARNING marks
881
+ # "fetch broke", INFO a by-design skip, DEBUG "entity didn't exist".
866
882
  if mandatory:
867
883
  raise MandatoryBackupError(
868
- f"could not read the current state of {key} to back "
869
- f"it up: {type(err).__name__}: {err}",
884
+ f"could not back up {key}: {type(err).__name__}: {err}",
870
885
  safe_detail=_flow_safe_failure_detail("capture", err),
871
886
  ) from err
872
- logger.warning(
873
- "Auto-backup: fetch failed for %s — %s: %s",
874
- key,
875
- type(err).__name__,
876
- err,
877
- )
887
+ if isinstance(err, _FlowHelperBackupSkip):
888
+ logger.info("Auto-backup: not backing up %s — %s", key, err)
889
+ else:
890
+ logger.warning(
891
+ "Auto-backup: fetch failed for %s — %s: %s",
892
+ key,
893
+ type(err).__name__,
894
+ err,
895
+ )
878
896
  if skip_reasons is not None:
879
897
  # Only locally authored detail: a remote error may carry values.
880
898
  detail = _flow_safe_failure_detail("capture", err)
@@ -958,7 +976,7 @@ class BackupManager:
958
976
  f"The new snapshot for {key} disappeared before capture completed"
959
977
  )
960
978
  if mandatory:
961
- raise MandatoryBackupError(message)
979
+ raise MandatoryBackupError(message, safe_detail=message)
962
980
  logger.warning("Auto-backup: %s", message)
963
981
  return None
964
982
  self._last_snapshot[key] = now
@@ -1456,7 +1474,7 @@ class BackupManager:
1456
1474
  domain = data["domain"]
1457
1475
  entity_id = data["entity_id"]
1458
1476
  config = data["config"]
1459
- handler = self._handlers.get(domain)
1477
+ handler = self.handler_for(domain)
1460
1478
  if handler is None:
1461
1479
  raise BackupRestoreError(
1462
1480
  f"No restore handler registered for domain {domain!r}",
@@ -1494,7 +1512,9 @@ class BackupManager:
1494
1512
  # Commit to the absent-target branch: if an entry reappeared since
1495
1513
  # preflight, recreation refuses instead of editing it without safety.
1496
1514
  restore = (
1497
- handler.restore
1515
+ functools.partial(_restore_config_subentry, recreate_only=True)
1516
+ if domain == "helper_config_subentry" and safety_path is None
1517
+ else handler.restore
1498
1518
  if needs_safety
1499
1519
  else functools.partial(
1500
1520
  _recreate_flow_helper, helper_type=_flow_type(domain)
@@ -1540,29 +1560,16 @@ class BackupManager:
1540
1560
  return await handler.fetch(self._client, entity_id) is not None
1541
1561
 
1542
1562
  async def _capture_restore_safety(self, domain: str, entity_id: str) -> Path | None:
1543
- """Flow-helper restore requires a fresh recovery point for its stable entry."""
1544
- if domain == "helper_config_subentry":
1545
- # A reconfigure flow can apply partly, so the capture is forced and
1546
- # mandatory; a deleted subentry has nothing to capture (None).
1547
- return await self.maybe_snapshot(
1548
- domain,
1549
- entity_id,
1550
- tool_name="ha_manage_backup.restore.safety",
1551
- force=True,
1552
- mandatory=True,
1553
- )
1554
- if not _is_flow_helper_domain(domain):
1555
- return await self.maybe_snapshot(
1556
- domain, entity_id, tool_name="ha_manage_backup.restore.safety"
1557
- )
1563
+ """Take a restore's recovery point; a failed capture raises and blocks it."""
1564
+ is_flow = _is_flow_helper_domain(domain)
1558
1565
  path = await self.maybe_snapshot(
1559
1566
  domain,
1560
1567
  entity_id,
1561
1568
  tool_name="ha_manage_backup.restore.safety",
1562
- force=True,
1569
+ force=is_flow or domain == "helper_config_subentry",
1563
1570
  mandatory=True,
1564
1571
  )
1565
- if path is None:
1572
+ if path is None and is_flow:
1566
1573
  raise MandatoryBackupError(
1567
1574
  f"{_flow_label(_flow_type(domain))} helper no longer exists; "
1568
1575
  "restore was not attempted"
@@ -1581,7 +1588,7 @@ class BackupManager:
1581
1588
  data["entity_id"], data["config"], _flow_type(domain)
1582
1589
  )
1583
1590
  data["entity_id"] = snapshot["entry_id"]
1584
- handler = self._handlers.get(domain)
1591
+ handler = self.handler_for(domain)
1585
1592
  if handler is None:
1586
1593
  raise LookupError(f"No diff handler registered for domain {domain!r}")
1587
1594
  current = await handler.fetch(self._client, data["entity_id"])
@@ -2710,28 +2717,6 @@ async def _restore_device(client: Any, entity_id: str, config: Any) -> Any:
2710
2717
  # Integration enable/disable — restore re-applies the disabled flag.
2711
2718
 
2712
2719
 
2713
- async def _fetch_integration(client: Any, entity_id: str) -> Any:
2714
- items = _require_list(
2715
- await _ws_send(client, {"type": "config_entries/get"}), "config_entries/get"
2716
- )
2717
- for item in items:
2718
- if item.get("entry_id") == entity_id:
2719
- return item
2720
- return None
2721
-
2722
-
2723
- async def _restore_integration(client: Any, entity_id: str, config: Any) -> Any:
2724
- disabled = config.get("disabled_by") is not None
2725
- return await _ws_send(
2726
- client,
2727
- {
2728
- "type": "config_entries/disable",
2729
- "entry_id": entity_id,
2730
- "disabled_by": "user" if disabled else None,
2731
- },
2732
- )
2733
-
2734
-
2735
2720
  # Helpers — one handler family. Entity ID is "<helper_type>:<id>" so each
2736
2721
  # helper type lists/restores via its native WS endpoints. The decorator
2737
2722
  # constructs the domain key as ``helper_<type>`` so files group naturally.
@@ -3147,9 +3132,14 @@ def _flow_options(config: Any, helper_type: str) -> dict[str, Any]:
3147
3132
  from .redaction import sentinel_option_keys
3148
3133
 
3149
3134
  label = _flow_label(helper_type)
3150
- if not isinstance(config, dict) or not config:
3135
+ if not isinstance(config, dict):
3151
3136
  raise _FlowHelperReadError(
3152
- f"{label} helper options must be a non-empty object", "invalid_options"
3137
+ f"{label} helper options must be an object", "invalid_options"
3138
+ )
3139
+ if not config:
3140
+ raise _FlowHelperBackupSkip( # e.g. otp: all of it is in entry.data
3141
+ f"{label} helper has no stored options to back up or restore",
3142
+ "invalid_options",
3153
3143
  )
3154
3144
  # The component's resolved-!secret scrub predates the server sentinels.
3155
3145
  # Neither kind of placeholder is a usable recovery value.
@@ -3195,10 +3185,9 @@ async def _fetch_flow_helper(client: Any, entity_id: str, helper_type: str) -> A
3195
3185
  )
3196
3186
  covered = _require_list(result.get("covered_types"), "helpers_list.covered_types")
3197
3187
  if helper_type not in covered:
3198
- raise _FlowHelperReadError(
3199
- f"The component cannot authoritatively read {helper_type} helpers",
3200
- f"{helper_type}_read_unsupported",
3201
- )
3188
+ from .tools.config_entry_backup import uncovered_flow_helper_error
3189
+
3190
+ raise await uncovered_flow_helper_error(client, helper_type)
3202
3191
  records = _require_list(result.get("helpers"), "ha_mcp_tools/helpers_list.helpers")
3203
3192
  entries: dict[str, dict[str, Any]] = {}
3204
3193
  for raw_record in records:
@@ -3224,6 +3213,12 @@ async def _fetch_flow_helper(client: Any, entity_id: str, helper_type: str) -> A
3224
3213
  if matches:
3225
3214
  record = matches[0]
3226
3215
  entry_id = record["entry_id"]
3216
+ if record.get("options_withheld"):
3217
+ raise _FlowHelperBackupSkip(
3218
+ f"{_flow_label(helper_type)} helper belongs to a custom integration "
3219
+ "whose options the component withholds: none to back up or restore",
3220
+ "options_withheld",
3221
+ )
3227
3222
  registry = await _entity_registry_rows(client)
3228
3223
  return {
3229
3224
  "entry_id": entry_id,
@@ -3753,7 +3748,9 @@ async def _fetch_config_subentry(client: Any, entity_id: str) -> Any:
3753
3748
  return _subentry_row(subentries, entry_id, subentry_id)
3754
3749
 
3755
3750
 
3756
- async def _restore_config_subentry(client: Any, entity_id: str, config: Any) -> Any:
3751
+ async def _restore_config_subentry(
3752
+ client: Any, entity_id: str, config: Any, *, recreate_only: bool = False
3753
+ ) -> Any:
3757
3754
  """Restore a subentry's data through its reconfigure flow.
3758
3755
 
3759
3756
  A snapshot field none of the reconfigure forms offers must still match the
@@ -3795,6 +3792,11 @@ async def _restore_config_subentry(client: Any, entity_id: str, config: Any) ->
3795
3792
  return await _recreate_config_subentry(
3796
3793
  client, entity_id, snapshot, data, subentries
3797
3794
  )
3795
+ if recreate_only: # absent at the safety capture: nothing may be edited
3796
+ raise BackupRestoreError(
3797
+ "Config subentry reappeared after its safety capture; not restored",
3798
+ reason="entry_still_exists",
3799
+ )
3798
3800
  expected, keys = _subentry_expectation(snapshot, data)
3799
3801
  return await _apply_and_verify(
3800
3802
  "Config subentry",
@@ -3920,7 +3922,7 @@ def _make_helper_handler(helper_type: str) -> DomainHandler:
3920
3922
 
3921
3923
  # The storage-collection helper types, snapshotted as ``helper_<type>`` through
3922
3924
  # ``<type>/list`` and restored through ``<type>/update``. Flow helpers (config
3923
- # entries) are registered separately from ``_flow_helper_types()``.
3925
+ # entries) get a handler built on each lookup (``BackupManager.handler_for``).
3924
3926
  _KNOWN_HELPER_TYPES = sorted(_HELPER_LIST_TYPES)
3925
3927
 
3926
3928
 
@@ -3947,7 +3949,7 @@ def register_default_handlers(mgr: BackupManager, _client: Any) -> None:
3947
3949
  mgr.register(DomainHandler("todo_item", _fetch_todo_item, _restore_todo_item))
3948
3950
  mgr.register(DomainHandler("entity", _fetch_entity_state, _restore_entity_state))
3949
3951
  mgr.register(DomainHandler("device", _fetch_device, _restore_device))
3950
- mgr.register(DomainHandler("integration", _fetch_integration, _restore_integration))
3952
+ mgr.register(DomainHandler("integration", fetch_integration, restore_integration))
3951
3953
  mgr.register(DomainHandler("file", _fetch_file, _restore_file))
3952
3954
  mgr.register(DomainHandler("yaml", _fetch_yaml, _restore_yaml))
3953
3955
  # Whole-file YAML config: same fetch as "file" (read_file), but restored via
@@ -3960,8 +3962,6 @@ def register_default_handlers(mgr: BackupManager, _client: Any) -> None:
3960
3962
  mgr.register(_make_blueprint_handler(blueprint_domain))
3961
3963
  for helper_type in _KNOWN_HELPER_TYPES:
3962
3964
  mgr.register(_make_helper_handler(helper_type))
3963
- for helper_type in sorted(_flow_helper_types()):
3964
- mgr.register(_make_flow_helper_handler(helper_type))
3965
3965
  mgr.register(
3966
3966
  DomainHandler(
3967
3967
  "helper_config_subentry", _fetch_config_subentry, _restore_config_subentry
@@ -628,8 +628,7 @@ class HomeAssistantClient:
628
628
  async def _request(
629
629
  self, method: str, endpoint: str, **kwargs: Any
630
630
  ) -> dict[str, Any]:
631
- """
632
- Make authenticated request to Home Assistant API and parse JSON body.
631
+ """Make authenticated request to Home Assistant API and parse JSON body.
633
632
 
634
633
  Args:
635
634
  method: HTTP method (GET, POST, etc.)
@@ -642,15 +641,17 @@ class HomeAssistantClient:
642
641
  Raises:
643
642
  HomeAssistantConnectionError: Connection failed
644
643
  HomeAssistantAuthError: Authentication failed
645
- HomeAssistantAPIError: API error
644
+ HomeAssistantAPIError: API error, or a GET reply that is not JSON
646
645
  """
647
646
  response = await self._raw_request(method, endpoint, **kwargs)
648
647
  try:
649
648
  result: dict[str, Any] = response.json()
650
649
  return result
651
- except json.JSONDecodeError:
652
- # Some endpoints return empty responses
653
- return {}
650
+ except ValueError as e: # not JSON, or not UTF-8
651
+ if method != "GET" or not response.content.strip():
652
+ return {} # empty body, or a write's reply: accepted, body unknown
653
+ # A read's {} would pass as the entity's config (e.g. in a backup).
654
+ raise HomeAssistantAPIError("GET reply is not JSON") from e
654
655
 
655
656
  async def get_config(self) -> dict[str, Any]:
656
657
  """Get Home Assistant configuration."""
@@ -662,7 +663,7 @@ class HomeAssistantClient:
662
663
 
663
664
  Raises ``HomeAssistantConnectionError`` when the response isn't the
664
665
  JSON array ``/states`` always returns on success -- including
665
- ``_request``'s own empty-dict fallback for an unparseable body.
666
+ ``_request``'s own empty-dict fallback for an empty body.
666
667
  Silently returning ``[]`` here would let a genuine fetch failure
667
668
  masquerade as "this instance has zero entities", which no real,
668
669
  running Home Assistant instance produces; callers that need to
@@ -1469,8 +1470,7 @@ class HomeAssistantClient:
1469
1470
  # Automation Configuration Management
1470
1471
 
1471
1472
  async def _resolve_automation_id(self, identifier: str) -> str:
1472
- """
1473
- Convert entity_id to unique_id if needed, or return unique_id as-is.
1473
+ """Convert entity_id to unique_id if needed, or return unique_id as-is.
1474
1474
 
1475
1475
  Args:
1476
1476
  identifier: Either entity_id (automation.xxx) or unique_id
@@ -1479,9 +1479,8 @@ class HomeAssistantClient:
1479
1479
  The unique_id for configuration API
1480
1480
 
1481
1481
  Raises:
1482
- HomeAssistantAPIError: If automation not found
1482
+ HomeAssistantAPIError: 404 if not found; other read failures propagate
1483
1483
  """
1484
- # If it looks like an entity_id, convert to unique_id
1485
1484
  if identifier.startswith("automation."):
1486
1485
  try:
1487
1486
  state = await self.get_entity_state(identifier)
@@ -1495,7 +1494,9 @@ class HomeAssistantClient:
1495
1494
  f"Converted entity_id {identifier} to unique_id {unique_id}"
1496
1495
  )
1497
1496
  return str(unique_id)
1498
- except HomeAssistantError as e:
1497
+ except HomeAssistantAPIError as e:
1498
+ if e.status_code != 404: # a failed read is not a missing one
1499
+ raise
1499
1500
  raise HomeAssistantAPIError(
1500
1501
  f"Failed to resolve automation {identifier}: {str(e)}",
1501
1502
  status_code=404,
@@ -1505,8 +1506,7 @@ class HomeAssistantClient:
1505
1506
  return identifier
1506
1507
 
1507
1508
  async def get_automation_config(self, identifier: str) -> dict[str, Any]:
1508
- """
1509
- Get automation configuration by unique_id or entity_id.
1509
+ """Get automation configuration by unique_id or entity_id.
1510
1510
 
1511
1511
  Args:
1512
1512
  identifier: Either automation entity_id (automation.xxx) or unique_id
@@ -27,6 +27,7 @@ import anyio
27
27
  # it in place (#2135/#2146). The private copy is immune, and CI tests
28
28
  # exactly the version production runs.
29
29
  from .._vendor import websockets
30
+ from .._vendor.websockets.exceptions import ConnectionClosed
30
31
  from ..config import get_global_settings
31
32
  from .rest_client import (
32
33
  HomeAssistantAuthError,
@@ -580,7 +581,7 @@ class HomeAssistantWebSocketClient:
580
581
  logger.error(f"Invalid JSON received: {e}")
581
582
  except Exception as e: # noqa: BLE001
582
583
  logger.error(f"Error processing message: {e}")
583
- except websockets.exceptions.ConnectionClosed as e:
584
+ except ConnectionClosed as e:
584
585
  # Prefer the frame we received (the peer closed on us); fall
585
586
  # back to the frame we sent (we failed the connection
586
587
  # ourselves, e.g. an over-max_size frame produces a sent
@@ -1025,16 +1026,15 @@ class HomeAssistantWebSocketClient:
1025
1026
 
1026
1027
  Exception policy (narrow, distinct log levels — Gemini #1382):
1027
1028
 
1028
- - Transport-level loss (``OSError``): subscription is implicitly
1029
- gone with the connection. Logged at ``debug`` so HA-mid-restart
1030
- cleanup doesn't spam warnings.
1029
+ - Transport-level loss (``OSError``, ``ConnectionClosed``,
1030
+ ``HomeAssistantConnectionError``): the socket closed during the send
1031
+ or before the answer, and the subscription went with it. Logged at
1032
+ ``debug`` so HA-mid-restart cleanup doesn't spam warnings.
1031
1033
  - HA-side rejection (``HomeAssistantCommandError``, e.g. "Subscription
1032
- not found" after a server-side reset): unexpected during normal
1033
- cleanup. Logged at ``warning`` so a real subscription leak is
1034
- discoverable.
1035
- - Everything else: propagates to the caller's ``finally`` so a
1036
- programming bug (TypeError, AttributeError) fails loudly instead
1037
- of being buried under a broad ``except``.
1034
+ not found" after a server-side reset): logged at ``warning`` so a
1035
+ real subscription leak is discoverable.
1036
+ - Everything else, a timeout or a programming bug (TypeError),
1037
+ propagates to the caller's ``finally`` instead of a broad ``except``.
1038
1038
  """
1039
1039
  if not self._state.is_ready:
1040
1040
  logger.debug(
@@ -1044,7 +1044,7 @@ class HomeAssistantWebSocketClient:
1044
1044
  return
1045
1045
  try:
1046
1046
  await self.send_command("unsubscribe_events", subscription=subscription_id)
1047
- except OSError as e:
1047
+ except (OSError, ConnectionClosed, HomeAssistantConnectionError) as e:
1048
1048
  logger.debug(
1049
1049
  "unsubscribe_events(%s): transport lost during cleanup: %s",
1050
1050
  subscription_id,
@@ -1308,7 +1308,7 @@ class HomeAssistantWebSocketClient:
1308
1308
  (
1309
1309
  HomeAssistantConnectionError,
1310
1310
  HomeAssistantCommandTimeout,
1311
- websockets.exceptions.ConnectionClosed,
1311
+ ConnectionClosed,
1312
1312
  ),
1313
1313
  ):
1314
1314
  logger.debug("Background subscription release failed: %s", error)
@@ -1354,7 +1354,7 @@ class HomeAssistantWebSocketClient:
1354
1354
  return
1355
1355
  try:
1356
1356
  await self.send_command(unsubscribe_type, subscription=subscription_id)
1357
- except OSError as e:
1357
+ except (OSError, ConnectionClosed, HomeAssistantConnectionError) as e:
1358
1358
  logger.debug(
1359
1359
  "unsubscribe_command(%s): transport lost during cleanup: %s",
1360
1360
  subscription_id,
@@ -99,7 +99,7 @@ SEARCH_KEYWORDS: dict[str, str] = {
99
99
  "conditions actions get show detail"
100
100
  ),
101
101
  # s09: "create helper" → ha_config_set_helper should outrank remove_helper
102
- # Covers all 29 helper types (12 simple + 17 flow-based, unified in #967).
102
+ # Covers the storage types and Core's common helper flows (unified in #967).
103
103
  "ha_config_set_helper": (
104
104
  "create update new add helper "
105
105
  "input_boolean input_button input_number input_text input_datetime "
@@ -208,6 +208,7 @@ async def _restore_backup(
208
208
  "invalid_snapshot": ErrorCode.VALIDATION_INVALID_PARAMETER,
209
209
  "unsupported_domain": ErrorCode.VALIDATION_INVALID_PARAMETER,
210
210
  "backup_capture_failed": ErrorCode.BACKUP_CAPTURE_FAILED,
211
+ "entry_deleted": ErrorCode.RESOURCE_NOT_FOUND,
211
212
  }.get(err.outcome.get("reason") or "", ErrorCode.SERVICE_CALL_FAILED)
212
213
  return JSONResponse(
213
214
  create_error_response(
@@ -231,11 +232,12 @@ async def _restore_backup(
231
232
  }.get(code, 409),
232
233
  )
233
234
  except MandatoryBackupError as err:
235
+ logger.warning("Restore of %s blocked: %s", name, err.safe_cause)
234
236
  return JSONResponse(
235
237
  create_error_response(
236
238
  ErrorCode.BACKUP_CAPTURE_FAILED,
237
- "Restore blocked: the pre-restore safety snapshot could not "
238
- "be captured. Nothing was changed.",
239
+ "Restore blocked: the pre-restore safety snapshot could not be "
240
+ f"captured ({err.safe_cause}). Nothing was changed.",
239
241
  suggestions=err.suggestions,
240
242
  context={
241
243
  "data": {