ha-mcp-dev 9.1.1.dev3368__tar.gz → 9.1.1.dev3370__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 (847) hide show
  1. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/PKG-INFO +1 -1
  2. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/pyproject.toml +1 -1
  3. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/pyproject.toml.orig +1 -1
  4. ha_mcp_dev-9.1.1.dev3370/src/ha_mcp/backup_integrations.py +209 -0
  5. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/backup_manager.py +32 -33
  6. ha_mcp_dev-9.1.1.dev3370/src/ha_mcp/client/config_entry_read.py +56 -0
  7. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/client/rest_client.py +19 -22
  8. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/redaction.py +52 -13
  9. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/backup.py +1 -1
  10. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/component_config_entries.py +76 -102
  11. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/config_entry_flow.py +91 -104
  12. ha_mcp_dev-9.1.1.dev3370/src/ha_mcp/tools/config_entry_flow_errors.py +434 -0
  13. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/config_entry_flow_form.py +1 -17
  14. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/config_entry_flow_introspect.py +94 -27
  15. ha_mcp_dev-9.1.1.dev3370/src/ha_mcp/tools/config_entry_flow_progress.py +86 -0
  16. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/config_entry_flow_walker.py +266 -374
  17. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/config_entry_identity.py +146 -198
  18. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/config_entry_reload_watch.py +41 -11
  19. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/config_helpers/describe.py +229 -142
  20. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/config_subentry_restore.py +8 -2
  21. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/core_contract.py +33 -12
  22. ha_mcp_dev-9.1.1.dev3370/src/ha_mcp/tools/flow_translations.py +107 -0
  23. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/helpers.py +4 -2
  24. ha_mcp_dev-9.1.1.dev3370/src/ha_mcp/tools/ignored_entries.py +38 -0
  25. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/integration_entry_state.py +16 -3
  26. ha_mcp_dev-9.1.1.dev3370/src/ha_mcp/tools/integration_flow_steps.py +650 -0
  27. ha_mcp_dev-9.1.1.dev3370/src/ha_mcp/tools/integration_schema.py +322 -0
  28. ha_mcp_dev-9.1.1.dev3370/src/ha_mcp/tools/integration_ws_commands.py +163 -0
  29. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/radio/base.py +5 -3
  30. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/smart_search/_deep.py +7 -7
  31. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/tools_config_helpers.py +2 -1
  32. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/tools_dev.py +4 -8
  33. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/tools_integrations.py +547 -662
  34. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/tools_service.py +2 -33
  35. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/util_helpers.py +33 -0
  36. ha_mcp_dev-9.1.1.dev3368/src/ha_mcp/backup_integrations.py +0 -49
  37. ha_mcp_dev-9.1.1.dev3368/src/ha_mcp/tools/config_entry_reconfigure.py +0 -990
  38. ha_mcp_dev-9.1.1.dev3368/src/ha_mcp/tools/integration_reconfigure.py +0 -354
  39. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/LICENSE +0 -0
  40. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/README.md +0 -0
  41. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/__init__.py +0 -0
  42. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/__main__.py +0 -0
  43. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_pypi_marker +0 -0
  44. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_rich_compat.py +0 -0
  45. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/__init__.py +0 -0
  46. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
  47. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
  48. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
  49. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
  50. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
  51. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
  52. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
  53. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
  54. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
  55. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
  56. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
  57. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
  58. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
  59. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
  60. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
  61. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
  62. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
  63. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
  64. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
  65. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev_security.py +0 -0
  66. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
  67. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
  68. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
  69. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
  70. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
  71. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
  72. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
  73. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
  74. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
  75. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
  76. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
  77. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
  78. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
  79. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
  80. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
  81. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
  82. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
  83. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
  84. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
  85. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
  86. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
  87. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
  88. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
  89. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
  90. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
  91. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
  92. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
  93. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
  94. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
  95. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
  96. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
  97. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
  98. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
  99. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
  100. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
  101. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
  102. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
  103. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
  104. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
  105. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
  106. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
  107. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/client/mixins/skills.py +0 -0
  108. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
  109. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
  110. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
  111. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
  112. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
  113. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
  114. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
  115. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
  116. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
  117. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
  118. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
  119. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
  120. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
  121. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
  122. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
  123. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
  124. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
  125. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
  126. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
  127. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
  128. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
  129. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
  130. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
  131. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
  132. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
  133. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
  134. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
  135. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
  136. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
  137. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
  138. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
  139. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
  140. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
  141. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
  142. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
  143. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
  144. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
  145. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/jev_search.py +0 -0
  146. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
  147. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
  148. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
  149. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
  150. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
  151. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
  152. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
  153. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
  154. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
  155. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
  156. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
  157. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
  158. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
  159. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
  160. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
  161. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
  162. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
  163. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
  164. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
  165. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
  166. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
  167. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
  168. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
  169. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
  170. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
  171. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
  172. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
  173. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
  174. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
  175. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
  176. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
  177. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
  178. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
  179. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
  180. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
  181. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
  182. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
  183. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
  184. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
  185. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
  186. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
  187. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
  188. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
  189. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
  190. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
  191. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
  192. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
  193. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
  194. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
  195. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
  196. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
  197. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
  198. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
  199. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
  200. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
  201. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
  202. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
  203. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
  204. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
  205. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
  206. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
  207. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
  208. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
  209. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
  210. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
  211. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
  212. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
  213. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
  214. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
  215. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
  216. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
  217. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
  218. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/mixins/extensions.py +0 -0
  219. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
  220. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
  221. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
  222. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
  223. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
  224. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
  225. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
  226. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
  227. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
  228. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
  229. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
  230. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
  231. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
  232. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
  233. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
  234. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
  235. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
  236. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
  237. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
  238. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
  239. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
  240. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
  241. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
  242. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
  243. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
  244. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
  245. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
  246. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
  247. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
  248. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
  249. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
  250. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
  251. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
  252. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
  253. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
  254. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
  255. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
  256. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
  257. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
  258. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
  259. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
  260. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
  261. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
  262. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
  263. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
  264. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
  265. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
  266. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
  267. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/skills/__init__.py +0 -0
  268. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/skills/_constants.py +0 -0
  269. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/skills/_resources.py +0 -0
  270. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/skills/_snapshot.py +0 -0
  271. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/skills/_source.py +0 -0
  272. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/skills/client.py +0 -0
  273. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/skills/extension.py +0 -0
  274. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/skills/models.py +0 -0
  275. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
  276. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
  277. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
  278. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
  279. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
  280. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
  281. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
  282. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
  283. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
  284. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
  285. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
  286. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
  287. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
  288. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
  289. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
  290. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
  291. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
  292. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
  293. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
  294. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
  295. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
  296. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
  297. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
  298. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
  299. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
  300. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
  301. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
  302. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
  303. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
  304. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
  305. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
  306. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
  307. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
  308. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
  309. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
  310. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
  311. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
  312. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
  313. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
  314. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
  315. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
  316. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
  317. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
  318. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
  319. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
  320. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
  321. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
  322. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
  323. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
  324. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
  325. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
  326. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
  327. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
  328. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
  329. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
  330. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
  331. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
  332. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
  333. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
  334. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
  335. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
  336. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
  337. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
  338. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
  339. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
  340. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
  341. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
  342. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
  343. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
  344. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
  345. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
  346. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
  347. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
  348. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
  349. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
  350. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
  351. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
  352. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
  353. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
  354. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
  355. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
  356. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
  357. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
  358. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
  359. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
  360. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
  361. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
  362. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
  363. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
  364. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
  365. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
  366. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
  367. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
  368. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
  369. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
  370. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
  371. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
  372. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
  373. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
  374. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
  375. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
  376. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
  377. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
  378. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
  379. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
  380. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
  381. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
  382. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
  383. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
  384. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
  385. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
  386. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
  387. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
  388. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
  389. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
  390. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
  391. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
  392. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
  393. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
  394. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
  395. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
  396. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
  397. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
  398. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
  399. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
  400. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
  401. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
  402. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
  403. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
  404. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
  405. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
  406. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
  407. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
  408. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
  409. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
  410. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
  411. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
  412. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
  413. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
  414. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
  415. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
  416. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
  417. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
  418. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
  419. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
  420. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
  421. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
  422. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
  423. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
  424. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
  425. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
  426. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
  427. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
  428. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
  429. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
  430. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
  431. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
  432. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/shared/_request_clock.py +0 -0
  433. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
  434. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
  435. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
  436. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
  437. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
  438. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
  439. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
  440. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
  441. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
  442. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
  443. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
  444. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
  445. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
  446. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
  447. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
  448. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
  449. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
  450. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
  451. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
  452. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
  453. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
  454. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
  455. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
  456. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
  457. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
  458. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
  459. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
  460. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
  461. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
  462. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
  463. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
  464. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
  465. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
  466. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
  467. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
  468. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
  469. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/requirements.txt +0 -0
  470. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
  471. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
  472. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
  473. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
  474. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
  475. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
  476. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
  477. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
  478. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
  479. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
  480. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
  481. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
  482. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
  483. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/client.py +0 -0
  484. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
  485. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
  486. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
  487. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
  488. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
  489. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
  490. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
  491. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
  492. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
  493. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
  494. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
  495. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
  496. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
  497. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
  498. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
  499. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
  500. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
  501. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
  502. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
  503. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
  504. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
  505. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
  506. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/server.py +0 -0
  507. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
  508. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
  509. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
  510. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
  511. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
  512. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
  513. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
  514. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
  515. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
  516. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
  517. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
  518. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
  519. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
  520. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
  521. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
  522. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
  523. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
  524. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
  525. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_vendor/websockets/version.py +0 -0
  526. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/_version.py +0 -0
  527. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/app_discovery.py +0 -0
  528. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/auth/__init__.py +0 -0
  529. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/auth/consent_form.py +0 -0
  530. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/auth/iss_stamp.py +0 -0
  531. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/auth/oidc_compat.py +0 -0
  532. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/auth/provider.py +0 -0
  533. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/backup_calendar.py +0 -0
  534. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/backup_dashboards.py +0 -0
  535. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/backup_diff.py +0 -0
  536. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/backup_entities.py +0 -0
  537. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/backup_entity_ids.py +0 -0
  538. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/backup_helper_target.py +0 -0
  539. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/backup_tags.py +0 -0
  540. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/backup_todo.py +0 -0
  541. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/backup_zones.py +0 -0
  542. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/browser_landing.py +0 -0
  543. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/client/__init__.py +0 -0
  544. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/client/admin_routes.py +0 -0
  545. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/client/error_log_journald.py +0 -0
  546. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/client/event_listeners.py +0 -0
  547. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/client/models.py +0 -0
  548. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/client/supervisor_client.py +0 -0
  549. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/client/websocket_client.py +0 -0
  550. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/client/websocket_listener.py +0 -0
  551. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/config.py +0 -0
  552. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/config_backup.py +0 -0
  553. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/config_meta.py +0 -0
  554. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/config_overrides.py +0 -0
  555. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/config_registry.py +0 -0
  556. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/config_settings.py +0 -0
  557. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
  558. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
  559. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
  560. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/dashboard_screenshot/engine_compat.py +0 -0
  561. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
  562. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
  563. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/dashboard_screenshot/theme_check.py +0 -0
  564. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
  565. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/errors.py +0 -0
  566. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/ha_request_queue.py +0 -0
  567. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/hacs_auto_refresh.py +0 -0
  568. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/http_transport.py +0 -0
  569. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/image_info.py +0 -0
  570. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/ipv6_lan_guard.py +0 -0
  571. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/listen_sockets.py +0 -0
  572. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/llm_exposure.py +0 -0
  573. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/log_filters.py +0 -0
  574. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/mcp_client_context.py +0 -0
  575. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/policy/__init__.py +0 -0
  576. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/policy/approval_queue.py +0 -0
  577. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/policy/decision_pin.py +0 -0
  578. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/policy/decisions.py +0 -0
  579. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/policy/editing.py +0 -0
  580. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/policy/evaluator.py +0 -0
  581. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/policy/events.py +0 -0
  582. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/policy/handlers.py +0 -0
  583. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/policy/middleware.py +0 -0
  584. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/policy/model.py +0 -0
  585. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/policy/mrtr.py +0 -0
  586. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/policy/persistence.py +0 -0
  587. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/policy/server_channels.py +0 -0
  588. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/policy/value_sources.py +0 -0
  589. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/py.typed +0 -0
  590. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/read_only.py +0 -0
  591. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/renamed_tools.py +0 -0
  592. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  593. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  594. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
  595. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-actions.md +0 -0
  596. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
  597. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
  598. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  599. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  600. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  601. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  602. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  603. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  604. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  605. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
  606. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  607. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/triggers-and-conditions.md +0 -0
  608. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
  609. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/server.py +0 -0
  610. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/server_instructions.py +0 -0
  611. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/server_lifespan.py +0 -0
  612. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/server_tool_text.py +0 -0
  613. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/settings_ui/__init__.py +0 -0
  614. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
  615. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
  616. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
  617. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/settings_ui/_handlers_oauth_callbacks.py +0 -0
  618. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
  619. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
  620. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
  621. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/settings_ui/_i18n.py +0 -0
  622. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
  623. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/settings_ui/_persistence.py +0 -0
  624. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
  625. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/settings_ui/_theme.py +0 -0
  626. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
  627. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/settings_ui/locales/README.md +0 -0
  628. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/settings_ui/locales/az.json +0 -0
  629. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
  630. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/settings_ui/locales/de.json +0 -0
  631. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/settings_ui/locales/en.json +0 -0
  632. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
  633. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/settings_ui/locales/es.json +0 -0
  634. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
  635. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/settings_ui/locales/hu.json +0 -0
  636. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/settings_ui/locales/it.json +0 -0
  637. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
  638. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
  639. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
  640. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
  641. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
  642. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
  643. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
  644. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
  645. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/settings_ui/settings.css +0 -0
  646. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/settings_ui/settings.html +0 -0
  647. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/settings_ui/settings_js/01_i18n_state.js +0 -0
  648. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/settings_ui/settings_js/02_tools_restart.js +0 -0
  649. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/settings_ui/settings_js/03_render_save.js +0 -0
  650. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/settings_ui/settings_js/04_backups.js +0 -0
  651. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/settings_ui/settings_js/05_feature_flags.js +0 -0
  652. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/settings_ui/settings_js/06_policy_cards.js +0 -0
  653. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/settings_ui/settings_js/07_policy_actions.js +0 -0
  654. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/settings_ui/settings_js/08_advanced.js +0 -0
  655. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/settings_ui/settings_js/09_prefs_visibility.js +0 -0
  656. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/settings_ui/settings_js/10_oauth_callbacks.js +0 -0
  657. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/smoke_test.py +0 -0
  658. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  659. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/storage_helper_types.py +0 -0
  660. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/strict_bps.py +0 -0
  661. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tool_catalog.py +0 -0
  662. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tool_dispatch.py +0 -0
  663. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/__init__.py +0 -0
  664. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/addon_connection_hints.py +0 -0
  665. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/area_messages.py +0 -0
  666. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/auto_backup.py +0 -0
  667. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/automation_errors.py +0 -0
  668. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/backup_access.py +0 -0
  669. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/backup_on_demand.py +0 -0
  670. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/backup_snapshot.py +0 -0
  671. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/backup_snapshot_restore.py +0 -0
  672. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  673. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/best_practice_result.py +0 -0
  674. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/best_practice_variables.py +0 -0
  675. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/blueprint_sources.py +0 -0
  676. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
  677. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/blueprint_write.py +0 -0
  678. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/bug_report_config.py +0 -0
  679. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/bug_report_redaction.py +0 -0
  680. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/bug_report_sources.py +0 -0
  681. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/bug_report_templates.py +0 -0
  682. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/bulk_selector.py +0 -0
  683. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/coercion.py +0 -0
  684. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/component_api.py +0 -0
  685. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/component_automation.py +0 -0
  686. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/component_config_reads.py +0 -0
  687. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
  688. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/component_devices.py +0 -0
  689. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/component_helper_collections.py +0 -0
  690. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/component_registries.py +0 -0
  691. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
  692. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/component_todo.py +0 -0
  693. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/config_entry_backup.py +0 -0
  694. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
  695. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/config_file_visibility.py +0 -0
  696. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/config_helpers/__init__.py +0 -0
  697. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/config_helpers/core_payload.py +0 -0
  698. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/config_helpers/create.py +0 -0
  699. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/config_helpers/flow.py +0 -0
  700. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/config_helpers/icon_route.py +0 -0
  701. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/config_helpers/listing.py +0 -0
  702. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/config_helpers/registry.py +0 -0
  703. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/config_helpers/schemas.py +0 -0
  704. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/config_helpers/typed_config.py +0 -0
  705. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/config_helpers/update.py +0 -0
  706. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/config_helpers/validation.py +0 -0
  707. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/config_write_errors.py +0 -0
  708. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/config_write_helpers.py +0 -0
  709. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/dashboard_card_describe.py +0 -0
  710. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
  711. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/dashboard_list_checks.py +0 -0
  712. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/dashboard_read_errors.py +0 -0
  713. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/dev_backup.py +0 -0
  714. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/device_control.py +0 -0
  715. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/device_enrichment.py +0 -0
  716. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/diagnostics_helpers.py +0 -0
  717. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/energy_preferences.py +0 -0
  718. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/entity_expose_batch.py +0 -0
  719. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/entity_param_parsing.py +0 -0
  720. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/entity_registration.py +0 -0
  721. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/entity_removal.py +0 -0
  722. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/entity_update_fields.py +0 -0
  723. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/error_log_parsing.py +0 -0
  724. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/event_call.py +0 -0
  725. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/event_listener_fields.py +0 -0
  726. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/flow_helper_lookup.py +0 -0
  727. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/hacs_backend.py +0 -0
  728. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/hacs_registration.py +0 -0
  729. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/helper_flows.py +0 -0
  730. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/history_response.py +0 -0
  731. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/log_common.py +0 -0
  732. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/log_sources.py +0 -0
  733. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/log_sources_fault.py +0 -0
  734. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/log_sources_logbook.py +0 -0
  735. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
  736. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/radio/__init__.py +0 -0
  737. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/radio/matter.py +0 -0
  738. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/radio/thread.py +0 -0
  739. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/radio/zigbee.py +0 -0
  740. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/radio/zwave.py +0 -0
  741. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/radio/zwave_parameters.py +0 -0
  742. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/recorder_errors.py +0 -0
  743. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/reference_validator.py +0 -0
  744. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/registry.py +0 -0
  745. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
  746. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/resource_codec.py +0 -0
  747. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/resource_patch.py +0 -0
  748. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/response_helpers.py +0 -0
  749. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/scene_discovery.py +0 -0
  750. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/search/__init__.py +0 -0
  751. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/search/base.py +0 -0
  752. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/search/component.py +0 -0
  753. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/search/entities.py +0 -0
  754. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/search/legacy.py +0 -0
  755. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/search/modes.py +0 -0
  756. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/search/overview.py +0 -0
  757. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/search/response.py +0 -0
  758. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/search/state.py +0 -0
  759. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/server_version.py +0 -0
  760. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  761. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  762. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  763. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  764. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  765. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
  766. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  767. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  768. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  769. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/statistics_calendar.py +0 -0
  770. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/statistics_helpers.py +0 -0
  771. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/statistics_resets.py +0 -0
  772. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/system_restart.py +0 -0
  773. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/tool_hints.py +0 -0
  774. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
  775. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/tools_addons.py +0 -0
  776. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/tools_areas.py +0 -0
  777. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
  778. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  779. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  780. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/tools_calendar.py +0 -0
  781. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/tools_camera.py +0 -0
  782. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/tools_categories.py +0 -0
  783. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/tools_code.py +0 -0
  784. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/tools_config_automations.py +0 -0
  785. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
  786. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
  787. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
  788. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
  789. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/tools_energy.py +0 -0
  790. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/tools_entities.py +0 -0
  791. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  792. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/tools_groups.py +0 -0
  793. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/tools_hacs.py +0 -0
  794. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/tools_history.py +0 -0
  795. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/tools_labels.py +0 -0
  796. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/tools_logs.py +0 -0
  797. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/tools_radio.py +0 -0
  798. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/tools_registry.py +0 -0
  799. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/tools_resources.py +0 -0
  800. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/tools_search.py +0 -0
  801. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/tools_security_policy.py +0 -0
  802. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/tools_services.py +0 -0
  803. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/tools_system.py +0 -0
  804. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/tools_themes.py +0 -0
  805. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/tools_todo.py +0 -0
  806. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/tools_traces.py +0 -0
  807. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/tools_updates.py +0 -0
  808. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/tools_utility.py +0 -0
  809. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  810. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  811. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
  812. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/tools_zones.py +0 -0
  813. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/update_categories.py +0 -0
  814. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/validation_middleware.py +0 -0
  815. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/tools/ws_waiters.py +0 -0
  816. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/transforms/__init__.py +0 -0
  817. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/transforms/categorized_search.py +0 -0
  818. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/transforms/compact_params.py +0 -0
  819. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/transforms/component_helpers.py +0 -0
  820. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/transforms/component_search.py +0 -0
  821. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  822. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/transforms/write_tool_note.py +0 -0
  823. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/transport_security.py +0 -0
  824. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/update_check.py +0 -0
  825. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/utils/__init__.py +0 -0
  826. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/utils/config_hash.py +0 -0
  827. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/utils/config_write_lock.py +0 -0
  828. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/utils/dashboard_patch.py +0 -0
  829. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/utils/data_paths.py +0 -0
  830. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
  831. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/utils/domain_handlers.py +0 -0
  832. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/utils/entity_membership.py +0 -0
  833. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  834. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  835. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/utils/mcp_client_host.py +0 -0
  836. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/utils/operation_manager.py +0 -0
  837. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/utils/python_sandbox.py +0 -0
  838. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/utils/registry_update_lock.py +0 -0
  839. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/utils/skill_loader.py +0 -0
  840. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/utils/usage_logger.py +0 -0
  841. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/visibility/__init__.py +0 -0
  842. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/visibility/config_files.py +0 -0
  843. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/visibility/enforcement.py +0 -0
  844. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/visibility/identifier_aliases.py +0 -0
  845. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/visibility/model.py +0 -0
  846. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/visibility/persistence.py +0 -0
  847. {ha_mcp_dev-9.1.1.dev3368 → ha_mcp_dev-9.1.1.dev3370}/src/ha_mcp/visibility/resolver.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ha-mcp-dev
3
- Version: 9.1.1.dev3368
3
+ Version: 9.1.1.dev3370
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 = "9.1.1.dev3368"
7
+ version = "9.1.1.dev3370"
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 = "9.1.1.dev3368"
7
+ version = "9.1.1.dev3370"
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,209 @@
1
+ """Auto-backup handlers for integration config entries.
2
+
3
+ A snapshot holds the entry's Core row, its enabled state and, read through the
4
+ ha_mcp_tools component, its options. Options are kept only when the component
5
+ could scrub them and they hold no redaction placeholder; otherwise
6
+ ``options_unavailable`` says why. ``entry.data`` (credentials) is never read,
7
+ and neither are subentries: ha_set_integration does not edit them, and Core
8
+ has no API to put a subentry's data back under a deleted entry.
9
+
10
+ A restore refuses a deleted entry rather than sending Core a command for an
11
+ entry it no longer has. Otherwise it enables the entry first when the snapshot
12
+ was enabled, so the options flow runs on a loaded entry, puts back options that
13
+ differ through the options flow and reads them back, then applies the enabled
14
+ state. Options it cannot put back (the snapshot has none, or empty ones an
15
+ options flow cannot produce) fail the restore after the enabled state is set.
16
+ """
17
+
18
+ from __future__ import annotations
19
+
20
+ from functools import partial
21
+ from typing import TYPE_CHECKING, Any
22
+
23
+ from .backup_entity_ids import _manager
24
+
25
+ if TYPE_CHECKING:
26
+ from .backup_manager import BackupRestoreError
27
+
28
+
29
+ async def fetch_integration(client: Any, entity_id: str) -> Any:
30
+ from .redaction import placeholder_option_keys
31
+ from .tools import component_config_entries
32
+ from .tools.component_api import component_supports, get_component_caps
33
+
34
+ bm = _manager()
35
+ read = await component_config_entries.fetch_config_entries(
36
+ client, entry_id=entity_id
37
+ )
38
+ if read is None:
39
+ # An installed component whose command failed is not a missing one.
40
+ caps = await get_component_caps(client)
41
+ why = (
42
+ "component_read_failed"
43
+ if component_supports(caps, "config_entries")
44
+ else "component_unavailable"
45
+ )
46
+ items = bm._require_list(
47
+ await bm._ws_send(client, {"type": "config_entries/get"}),
48
+ "config_entries/get",
49
+ )
50
+ for item in items:
51
+ if item.get("entry_id") == entity_id:
52
+ return {**item, "options_unavailable": why}
53
+ return None
54
+ if not read.rows:
55
+ return None
56
+ row = {key: value for key, value in read.rows[0].items() if key != "subentries"}
57
+ options = row.pop("options", None)
58
+ if not isinstance(options, dict):
59
+ row["options_unavailable"] = "options_missing"
60
+ elif read.secret_scrub_degraded:
61
+ row["options_unavailable"] = "secret_scrub_degraded"
62
+ elif placeholder_option_keys(options):
63
+ row["options_unavailable"] = "redacted_options"
64
+ else:
65
+ row["options"] = options
66
+ return row
67
+
68
+
69
+ async def _read_options(client: Any, entry_id: str) -> Any:
70
+ # Options the component can no longer read safely leave the restore
71
+ # unverified rather than failing it as a mismatch.
72
+ from .client.rest_client import HomeAssistantError
73
+
74
+ row = await fetch_integration(client, entry_id)
75
+ if row is not None and "options" not in row:
76
+ raise HomeAssistantError(f"options unreadable: {row['options_unavailable']}")
77
+ return row
78
+
79
+
80
+ async def _set_disabled_by(client: Any, entry_id: str, disabled_by: Any) -> Any:
81
+ return await _manager()._ws_send(
82
+ client,
83
+ {
84
+ "type": "config_entries/disable",
85
+ "entry_id": entry_id,
86
+ "disabled_by": disabled_by,
87
+ },
88
+ )
89
+
90
+
91
+ async def restore_integration(client: Any, entity_id: str, config: Any) -> Any:
92
+ bm = _manager()
93
+ current = await fetch_integration(client, entity_id)
94
+ if current is None:
95
+ raise bm.BackupRestoreError(
96
+ f"Config entry {entity_id} ({config.get('domain')}) no longer exists. "
97
+ "An integration snapshot holds only the entry's metadata, options and "
98
+ "enabled state, so it cannot recreate a deleted entry. Nothing was "
99
+ "changed; add the integration again to recover it.",
100
+ reason="entry_deleted",
101
+ suggestions=[
102
+ "Add it again with ha_set_integration, or have the user add it in "
103
+ "the HA UI when it needs their credentials."
104
+ ],
105
+ )
106
+ options = config.get("options")
107
+ if "options" in config and not isinstance(options, dict):
108
+ raise bm.BackupRestoreError(
109
+ "The integration snapshot's options are not an object. Nothing was "
110
+ "changed.",
111
+ reason="invalid_snapshot",
112
+ )
113
+ if options is not None and "options" not in current:
114
+ raise bm.BackupRestoreError(
115
+ f"The current options of config entry {entity_id} cannot be read "
116
+ f"({current.get('options_unavailable')}), so the snapshot's options "
117
+ "cannot be checked against them. Nothing was changed.",
118
+ reason="options_unreadable",
119
+ )
120
+ not_restored = _options_not_restored(config, current)
121
+ disabled_by = None if config.get("disabled_by") is None else "user"
122
+ enable_first = disabled_by is None and current.get("disabled_by") is not None
123
+ if enable_first:
124
+ result = await _set_disabled_by(client, entity_id, None)
125
+ if (
126
+ not_restored is None
127
+ and options is not None
128
+ and not bm._snapshot_configs_match(options, current["options"])
129
+ ):
130
+ try:
131
+ await _restore_options(client, entity_id, config, current["options"])
132
+ except bm.BackupRestoreError as err:
133
+ if not enable_first:
134
+ raise
135
+ raise _enabled_then_failed(entity_id, err) from err
136
+ if not enable_first:
137
+ result = await _set_disabled_by(client, entity_id, disabled_by)
138
+ if not_restored is not None:
139
+ verification_status, why = not_restored
140
+ raise bm.BackupRestoreError(
141
+ f"The enabled state of config entry {entity_id} was restored, but "
142
+ f"its options were not: {why}.",
143
+ apply_status="applied",
144
+ verification_status=verification_status,
145
+ reason="options_not_restored",
146
+ )
147
+ return result
148
+
149
+
150
+ def _enabled_then_failed(entity_id: str, err: BackupRestoreError) -> BackupRestoreError:
151
+ """``err`` from the options restore of an entry the restore enabled first."""
152
+ if err.outcome["apply_status"] != "not_applied":
153
+ detail = f"then its options restore failed: {err}"
154
+ elif err.outcome.get("reason"):
155
+ detail = f"but its options were not restored: {err}"
156
+ else:
157
+ detail = "but its options were not restored: the options flow refused them"
158
+ failed: BackupRestoreError = _manager().BackupRestoreError(
159
+ f"Config entry {entity_id} was enabled, {detail}",
160
+ # The enable applied; the options restore keeps its own status.
161
+ **{
162
+ **err.outcome,
163
+ "apply_status": "applied",
164
+ "options_apply_status": err.outcome["apply_status"],
165
+ },
166
+ )
167
+ return failed
168
+
169
+
170
+ def _options_not_restored(
171
+ config: Any, current: dict[str, Any]
172
+ ) -> tuple[str, str] | None:
173
+ """``(verification_status, why)`` for options a restore cannot put back."""
174
+ if "options_unavailable" in config or "options" not in config:
175
+ why = config.get("options_unavailable", "taken before options were captured")
176
+ return ("unavailable", f"the snapshot holds none ({why})")
177
+ if config.get("options") == {} and current["options"]:
178
+ return (
179
+ "mismatched",
180
+ "the snapshot's are empty, which an options flow cannot produce",
181
+ )
182
+ return None
183
+
184
+
185
+ async def _restore_options(
186
+ client: Any, entity_id: str, config: Any, current_options: dict[str, Any]
187
+ ) -> None:
188
+ from .tools.config_entry_flow import update_config_entry_options
189
+
190
+ bm = _manager()
191
+ options = config["options"]
192
+ await bm._apply_and_verify(
193
+ f"{config.get('domain')} integration",
194
+ partial(
195
+ update_config_entry_options,
196
+ client,
197
+ entity_id,
198
+ options,
199
+ expected_domain=config.get("domain"),
200
+ keep_current_values=False,
201
+ fixed_options=current_options,
202
+ ),
203
+ partial(
204
+ bm._verify_readback,
205
+ partial(_read_options, client, entity_id),
206
+ {"options": options},
207
+ ("options",),
208
+ ),
209
+ )
@@ -54,7 +54,7 @@ import time
54
54
  import weakref
55
55
  from collections import Counter
56
56
  from collections.abc import AsyncIterator, Awaitable, Callable
57
- from contextlib import asynccontextmanager, suppress
57
+ from contextlib import asynccontextmanager, nullcontext, suppress
58
58
  from dataclasses import dataclass, field
59
59
  from datetime import UTC, datetime
60
60
  from functools import cached_property, partial
@@ -275,6 +275,15 @@ class _FlowHelperBackupSkip(_FlowHelperReadError):
275
275
  lists. Best-effort capture logs it at INFO."""
276
276
 
277
277
 
278
+ def _restore_is_flow_driven(domain: str) -> bool:
279
+ """A snapshot domain whose restore drives a Core flow, which can apply it
280
+ partly: a flow helper, a config subentry or an integration entry."""
281
+ return _is_flow_helper_domain(domain) or domain in (
282
+ "helper_config_subentry",
283
+ "integration",
284
+ )
285
+
286
+
278
287
  def _is_flow_helper_domain(domain: str) -> bool:
279
288
  """A ``helper_<type>`` snapshot domain of a config-entry (flow) helper.
280
289
 
@@ -1514,18 +1523,17 @@ class BackupManager:
1514
1523
  safety_backup=None,
1515
1524
  ) from err
1516
1525
  data["entity_id"] = entity_id
1517
- async with self.config_entry_write_guard(entity_id, exclusive=True):
1518
- return await self._restore_snapshot_data(
1519
- name, data, take_safety_backup=take_safety_backup
1520
- )
1521
- if data["domain"] == "entity":
1522
- async with restore_locks(self._client, data["config"]):
1523
- return await self._restore_snapshot_data(
1524
- name, data, take_safety_backup=take_safety_backup
1525
- )
1526
- return await self._restore_snapshot_data(
1527
- name, data, take_safety_backup=take_safety_backup
1528
- )
1526
+ guard: Any = self.config_entry_write_guard(entity_id, exclusive=True)
1527
+ elif data["domain"] == "entity":
1528
+ guard = restore_locks(self._client, data["config"])
1529
+ elif data["domain"] == "integration": # its restore drives an options flow
1530
+ guard = self.config_entry_write_guard(data["entity_id"])
1531
+ else:
1532
+ guard = nullcontext()
1533
+ async with guard:
1534
+ return await self._restore_snapshot_data(
1535
+ name, data, take_safety_backup=take_safety_backup
1536
+ )
1529
1537
  finally:
1530
1538
  self._unprotect_snapshot(name)
1531
1539
 
@@ -1567,11 +1575,10 @@ class BackupManager:
1567
1575
  step = "safety_preflight"
1568
1576
  try:
1569
1577
  needs_safety = await self._restore_needs_safety(handler, entity_id, config)
1570
- # Existing flow helpers and subentries always require a fresh
1571
- # recovery point: their flows can apply a restore partly.
1572
- is_flow = _is_flow_helper_domain(domain)
1573
- flow_driven = is_flow or domain == "helper_config_subentry"
1574
- if needs_safety and (flow_driven or take_safety_backup):
1578
+ # Existing flow helpers, subentries and integration entries always
1579
+ # require a fresh recovery point: their flows can apply a restore
1580
+ # partly.
1581
+ if needs_safety and (_restore_is_flow_driven(domain) or take_safety_backup):
1575
1582
  step = "safety_backup"
1576
1583
  safety_path = await self._capture_restore_safety(
1577
1584
  domain, entity_id, outcome, config
@@ -1643,7 +1650,7 @@ class BackupManager:
1643
1650
  ) -> Path | None:
1644
1651
  """Take a restore's recovery point; a failed capture raises and blocks it."""
1645
1652
  is_flow = _is_flow_helper_domain(domain)
1646
- flow_driven = is_flow or domain == "helper_config_subentry"
1653
+ flow_driven = _restore_is_flow_driven(domain)
1647
1654
  if not flow_driven and not getattr(self._settings, "enable_auto_backup", False):
1648
1655
  return None # auto-backup off: no safety backup is promised
1649
1656
  # The restore overwrites the current state, so the throttle that a
@@ -2780,7 +2787,7 @@ def _flow_label(helper_type: str) -> str:
2780
2787
 
2781
2788
  def _flow_options(config: Any, helper_type: str) -> dict[str, Any]:
2782
2789
  """Require persisted flow-helper options that can safely be restored."""
2783
- from .redaction import sentinel_option_keys
2790
+ from .redaction import placeholder_option_keys
2784
2791
 
2785
2792
  label = _flow_label(helper_type)
2786
2793
  if not isinstance(config, dict):
@@ -2792,9 +2799,9 @@ def _flow_options(config: Any, helper_type: str) -> dict[str, Any]:
2792
2799
  f"{label} helper has no stored options to back up or restore",
2793
2800
  "invalid_options",
2794
2801
  )
2795
- # The component's resolved-!secret scrub predates the server sentinels.
2796
- # Neither kind of placeholder is a usable recovery value.
2797
- if sentinel_option_keys(config) or _contains_redacted_leaf(config):
2802
+ # Neither a server sentinel nor the component's scrub is a usable
2803
+ # recovery value.
2804
+ if placeholder_option_keys(config):
2798
2805
  raise _FlowHelperReadError(
2799
2806
  f"{label} helper options contain redacted values; capture is incomplete",
2800
2807
  "redacted_options",
@@ -2802,14 +2809,6 @@ def _flow_options(config: Any, helper_type: str) -> dict[str, Any]:
2802
2809
  return config
2803
2810
 
2804
2811
 
2805
- def _contains_redacted_leaf(value: Any) -> bool:
2806
- if isinstance(value, dict):
2807
- return any(_contains_redacted_leaf(item) for item in value.values())
2808
- if isinstance(value, list):
2809
- return any(_contains_redacted_leaf(item) for item in value)
2810
- return isinstance(value, str) and value == "**redacted**"
2811
-
2812
-
2813
2812
  async def _fetch_flow_helper(client: Any, entity_id: str, helper_type: str) -> Any:
2814
2813
  """Read a flow helper's options through the component, without starting a flow.
2815
2814
 
@@ -3309,13 +3308,13 @@ def _subentry_target(entity_id: str) -> tuple[str, str]:
3309
3308
 
3310
3309
 
3311
3310
  def _subentry_data(data: Any) -> dict[str, Any]:
3312
- from .redaction import sentinel_option_keys
3311
+ from .redaction import placeholder_option_keys
3313
3312
 
3314
3313
  if not isinstance(data, dict):
3315
3314
  raise _FlowHelperReadError(
3316
3315
  "Config subentry data must be an object", "invalid_data"
3317
3316
  )
3318
- if sentinel_option_keys(data) or _contains_redacted_leaf(data):
3317
+ if placeholder_option_keys(data):
3319
3318
  raise _FlowHelperReadError(
3320
3319
  "Config subentry data contains redacted values; capture is incomplete",
3321
3320
  "redacted_data",
@@ -0,0 +1,56 @@
1
+ """The read behind :meth:`HomeAssistantClient.get_config_entry`.
2
+
3
+ Core's WebSocket ``config_entries/get_single`` answers ``{"config_entry":
4
+ fragment}`` or ``not_found``. Core has no REST read for one entry, so its REST
5
+ list is the fallback when no WebSocket answer comes back, or when the token's
6
+ user is not an admin (``get_single`` is admin-only, the REST list is not).
7
+ """
8
+
9
+ from __future__ import annotations
10
+
11
+ import logging
12
+ from typing import TYPE_CHECKING, Any
13
+
14
+ from .rest_client import HomeAssistantAPIError, HomeAssistantConnectionError
15
+
16
+ if TYPE_CHECKING:
17
+ from .rest_client import HomeAssistantClient
18
+
19
+ logger = logging.getLogger(__name__)
20
+
21
+
22
+ async def read_config_entry(
23
+ client: HomeAssistantClient, entry_id: str
24
+ ) -> dict[str, Any]:
25
+ reply: dict[str, Any] | None = None
26
+ try:
27
+ reply = await client.send_websocket_message(
28
+ {"type": "config_entries/get_single", "entry_id": entry_id},
29
+ expected_error_codes=frozenset({"not_found", "unauthorized"}),
30
+ )
31
+ except HomeAssistantConnectionError as e:
32
+ logger.debug(f"config_entries/get_single unanswered, using REST: {e}")
33
+ found: dict[str, Any] | None = None
34
+ if reply is None or reply.get("error_code") == "unauthorized":
35
+ entries = await client.list_config_entries()
36
+ found = next((e for e in entries if e.get("entry_id") == entry_id), None)
37
+ elif reply.get("success"):
38
+ result = reply.get("result")
39
+ found = result.get("config_entry") if isinstance(result, dict) else None
40
+ if not isinstance(found, dict):
41
+ # Core answered, so this is not a missing entry: no 404, no REST.
42
+ raise HomeAssistantAPIError(
43
+ f"config_entries/get_single answered without a config entry: {result!r}",
44
+ response_data=reply,
45
+ )
46
+ elif reply.get("error_code") != "not_found":
47
+ raise HomeAssistantAPIError(
48
+ f"config_entries/get_single failed: {reply.get('error')}",
49
+ response_data=reply,
50
+ )
51
+ if found is None:
52
+ raise HomeAssistantAPIError(
53
+ f"Config entry not found: {entry_id}",
54
+ status_code=404,
55
+ )
56
+ return found
@@ -1878,14 +1878,7 @@ class HomeAssistantClient:
1878
1878
  return await self._list_registry("config/device_registry/list", "device")
1879
1879
 
1880
1880
  async def get_config_entry(self, entry_id: str) -> dict[str, Any]:
1881
- """
1882
- Get config entry details.
1883
-
1884
- Note: Home Assistant doesn't have a direct REST API endpoint for individual
1885
- config entries. This method lists all entries and filters by entry_id.
1886
-
1887
- Args:
1888
- entry_id: Config entry ID
1881
+ """Get one config entry; see :mod:`.config_entry_read` for the routes.
1889
1882
 
1890
1883
  Returns:
1891
1884
  Home Assistant's config-entry fragment (``ConfigEntry.as_json_fragment``):
@@ -1893,19 +1886,11 @@ class HomeAssistantClient:
1893
1886
  entry's connection settings and credentials are not in it.
1894
1887
 
1895
1888
  Raises:
1896
- HomeAssistantAPIError: If entry not found or API error
1889
+ HomeAssistantAPIError: 404 if not found; Core's other errors
1897
1890
  """
1898
- logger.debug(f"Getting config entry: {entry_id}")
1899
- entries = await self.list_config_entries()
1900
- found: dict[str, Any] | None = next(
1901
- (entry for entry in entries if entry.get("entry_id") == entry_id), None
1902
- )
1903
- if found is None:
1904
- raise HomeAssistantAPIError(
1905
- f"Config entry not found: {entry_id}",
1906
- status_code=404,
1907
- )
1908
- return found
1891
+ from .config_entry_read import read_config_entry
1892
+
1893
+ return await read_config_entry(self, entry_id)
1909
1894
 
1910
1895
  async def delete_config_entry(self, entry_id: str) -> dict[str, Any]:
1911
1896
  """Delete a config entry via REST API.
@@ -1927,9 +1912,17 @@ class HomeAssistantClient:
1927
1912
  logger.debug(f"Deleting config entry: {entry_id}")
1928
1913
  return await self._request("DELETE", f"/config/config_entries/entry/{entry_id}")
1929
1914
 
1930
- async def send_websocket_message(self, message: dict[str, Any]) -> dict[str, Any]:
1915
+ async def send_websocket_message(
1916
+ self,
1917
+ message: dict[str, Any],
1918
+ *,
1919
+ expected_error_codes: frozenset[str] = frozenset(),
1920
+ ) -> dict[str, Any]:
1931
1921
  """Send message via WebSocket and wait for response.
1932
1922
 
1923
+ A Home Assistant error whose code is in ``expected_error_codes`` is an
1924
+ answer the caller handles, so it is logged at debug, not error.
1925
+
1933
1926
  Uses a per-client WebSocket connection keyed to the client's own
1934
1927
  credentials (base_url + token). This ensures OAuth mode uses the
1935
1928
  real HA credentials from the token claims, not the global sentinel
@@ -2036,7 +2029,11 @@ class HomeAssistantClient:
2036
2029
  # Name the command in the log line: a bare "Command failed:
2037
2030
  # Unknown command." is undiagnosable from a user's log
2038
2031
  # (issue #1889 took a live reproduction to attribute).
2039
- logger.error(f"WebSocket message failed ({message.get('type')}): {e}")
2032
+ code = getattr(e, "code", None)
2033
+ logger.log(
2034
+ logging.DEBUG if code in expected_error_codes else logging.ERROR,
2035
+ f"WebSocket message failed ({message.get('type')}): {e}",
2036
+ )
2040
2037
  # Preserve HA's structured error code (e.g. ``not_found``) so callers
2041
2038
  # can distinguish HA's authoritative verdict from a transient failure
2042
2039
  # instead of only seeing the stringified message.
@@ -14,7 +14,10 @@ surfaces stop returning operator secrets verbatim:
14
14
  2. **Integration options** (``ha_get_integration``): fields the
15
15
  options-flow schema marks with a password text selector are replaced the
16
16
  same way, on both the harvested options and the ``include_schema=True``
17
- schema echo (whose ``suggested_value`` carries the live value).
17
+ fields (whose current value comes from the form's ``suggested_value``).
18
+ Stored option values are checked against the flow's first form only,
19
+ so a password field that only a later form declares is not detected
20
+ in them.
18
21
  3. **Every other tool response**: secret values seen while serving 1 and 2
19
22
  are remembered in a process-local known-secrets set, and
20
23
  :class:`RedactSecretsMiddleware` (registered just outside the
@@ -24,7 +27,8 @@ surfaces stop returning operator secrets verbatim:
24
27
  The set/empty sentinel split keeps the genuinely useful diagnostic — "is
25
28
  this credential configured at all?" — answerable without disclosing the
26
29
  value. ``ha_manage_app`` and the config-entry flow writes reject
27
- submitted values that are (or contain) a sentinel — unconditionally, not
30
+ submitted values that are (or contain) a sentinel, and the flow writes also
31
+ reject the component's ``**redacted**`` placeholder — unconditionally, not
28
32
  only while the flag is on — so a redacted marker can never be round-tripped
29
33
  into a live config (add-on writes still merge from the real, unredacted
30
34
  current options server-side).
@@ -41,7 +45,7 @@ import json
41
45
  import logging
42
46
  import re
43
47
  import threading
44
- from collections.abc import Iterable, Sequence
48
+ from collections.abc import Callable, Iterable, Sequence
45
49
  from typing import Any
46
50
 
47
51
  from ha_mcp._vendor.fastmcp.server.middleware.middleware import (
@@ -397,34 +401,61 @@ def _collect_stored(value: Any, listed: frozenset[str], secret: bool) -> set[str
397
401
  return known_values_for_option_item(value) if secret else set()
398
402
 
399
403
 
400
- def sentinel_option_keys(options: Any, _prefix: str = "") -> list[str]:
404
+ def sentinel_option_keys(options: Any) -> list[str]:
401
405
  """Dotted paths of submitted option values that equal a redaction sentinel.
402
406
 
403
407
  Used by ``ha_manage_app`` config mode to reject round-tripping a
404
408
  redacted read back into a live add-on config.
405
409
  """
410
+ return _matching_option_keys(options, carries_sentinel)
411
+
412
+
413
+ #: What the ha_mcp_tools component writes over an option value equal to a
414
+ #: ``secrets.yaml`` entry. Like a sentinel, it is no usable value to write.
415
+ _COMPONENT_REDACTED = "**redacted**"
416
+
417
+
418
+ def _is_placeholder(value: Any) -> bool:
419
+ return carries_sentinel(value) or value == _COMPONENT_REDACTED
420
+
421
+
422
+ def placeholder_option_keys(options: Any) -> list[str]:
423
+ """Dotted paths of option values that are a redaction sentinel or the
424
+ component's ``**redacted**`` scrub.
425
+
426
+ For config-entry options, which the component may have served.
427
+ """
428
+ return _matching_option_keys(options, _is_placeholder)
429
+
430
+
431
+ def _matching_option_keys(
432
+ options: Any, match: Callable[[Any], bool], prefix: str = ""
433
+ ) -> list[str]:
434
+ """Dotted paths of the values in an options dict that ``match`` accepts."""
406
435
  keys: list[str] = []
407
436
  if not isinstance(options, dict):
408
437
  return keys
409
438
  for name, value in options.items():
410
- path = f"{_prefix}.{name}" if _prefix else str(name)
411
- _collect_sentinel_paths(value, path, keys)
439
+ path = f"{prefix}.{name}" if prefix else str(name)
440
+ _collect_matching_paths(value, path, keys, match)
412
441
  return keys
413
442
 
414
443
 
415
- def _collect_sentinel_paths(value: Any, path: str, keys: list[str]) -> None:
416
- """Append ``path`` (or deeper paths) for every sentinel-carrying value.
444
+ def _collect_matching_paths(
445
+ value: Any, path: str, keys: list[str], match: Callable[[Any], bool]
446
+ ) -> None:
447
+ """Append ``path`` (or deeper paths) for every value ``match`` accepts.
417
448
 
418
- Recurses through dicts AND lists at any nesting depth so a sentinel at
449
+ Recurses through dicts AND lists at any nesting depth so a marker at
419
450
  e.g. ``opt[0][0]`` cannot slip past the write guard.
420
451
  """
421
- if carries_sentinel(value):
452
+ if match(value):
422
453
  keys.append(path)
423
454
  elif isinstance(value, dict):
424
- keys.extend(sentinel_option_keys(value, path))
455
+ keys.extend(_matching_option_keys(value, match, path))
425
456
  elif isinstance(value, list):
426
457
  for idx, item in enumerate(value):
427
- _collect_sentinel_paths(item, f"{path}[{idx}]", keys)
458
+ _collect_matching_paths(item, f"{path}[{idx}]", keys, match)
428
459
 
429
460
 
430
461
  # ---------------------------------------------------------------------------
@@ -455,7 +486,8 @@ def redact_flow_schema(data_schema: Any) -> Any:
455
486
 
456
487
  HA injects the persisted option into each field's
457
488
  ``description.suggested_value`` (and static defaults into ``default`` /
458
- ``value``), so an ``include_schema=True`` echo carries the live secret.
489
+ ``value``), so a schema handed back to a caller (a describe's fields, a
490
+ form-error response) would carry the live secret.
459
491
  Harvests each replaced value into the known-secrets set first.
460
492
  """
461
493
  if not isinstance(data_schema, list):
@@ -631,6 +663,13 @@ def scrub_obj(obj: Any, secrets: Sequence[str]) -> Any:
631
663
  return obj
632
664
 
633
665
 
666
+ def scrub_known_secrets(text: str) -> str:
667
+ """``text`` with every known secret value replaced, while the flag is on."""
668
+ if not redaction_enabled():
669
+ return text
670
+ return scrub_text(text, with_serialized_variants(known_secret_values()))
671
+
672
+
634
673
  class RedactSecretsMiddleware(Middleware):
635
674
  """Scrub known secret values from every tool response and tool error.
636
675
 
@@ -89,7 +89,7 @@ def register_backup_tools(
89
89
  | `edits` | `list` | List per-entity auto-backups (lightweight). Filter by `domain` and/or `entity_id`. |
90
90
  | `edits` | `view` | Read one auto-backup file by name; returns YAML and parsed `config`. |
91
91
  | `edits` | `diff` | Compare one auto-backup against the entity's current config. RFC 6902 JSON-Patch + add/remove/replace counts; bounded output. Read-only — fetches the live config, makes no changes. |
92
- | `edits` | `restore` | Re-apply one auto-backup. Existing flow helpers (template, group, utility_meter, …) and config subentries require a fresh per-entity backup; other domains follow auto-backup settings and may proceed without one. A deleted flow helper is recreated with a new config-entry ID and its saved entity IDs are restored if unoccupied; a deleted subentry is recreated with a new subentry ID. A deleted integration config entry cannot be recreated: its snapshot holds only metadata and the enabled state. **No HA restart.** |
92
+ | `edits` | `restore` | Re-apply one auto-backup. Existing flow helpers (template, group, utility_meter, …), config subentries and integration config entries require a fresh per-entity backup; other domains follow auto-backup settings and may proceed without one. A deleted flow helper is recreated with a new config-entry ID and its saved entity IDs are restored if unoccupied; a deleted subentry is recreated with a new subentry ID. An integration config entry's snapshot holds its metadata, its enabled state and its options, which are kept only when the ha_mcp_tools component serves the read, its `secrets.yaml` scrub ran, and no value is a redaction placeholder; a restore re-enables the entry first when needed, then puts back differing options through its options flow, and reports options it cannot put back (none kept, or empty ones) as not restored. It holds neither the entry's data nor its subentries, so a deleted integration config entry cannot be recreated. **No HA restart.** |
93
93
  | `edits` | `delete` | Delete one auto-backup by `backup_name`, or bulk-delete by filter. |
94
94
 
95
95
  **When to use which scope:**