ha-mcp-dev 9.1.2.dev3402__tar.gz → 9.2.0.dev3410__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 (851) hide show
  1. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/PKG-INFO +1 -1
  2. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/pyproject.toml +1 -1
  3. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/pyproject.toml.orig +1 -1
  4. ha_mcp_dev-9.2.0.dev3410/src/ha_mcp/backup_files.py +88 -0
  5. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/backup_manager.py +6 -59
  6. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/auto_backup.py +10 -0
  7. ha_mcp_dev-9.2.0.dev3410/src/ha_mcp/tools/file_edit_refusal.py +55 -0
  8. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/hacs_backend.py +67 -3
  9. ha_mcp_dev-9.2.0.dev3410/src/ha_mcp/tools/hacs_own_repository.py +162 -0
  10. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/resource_patch.py +1 -1
  11. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/tools_filesystem.py +145 -164
  12. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/tools_hacs.py +15 -1
  13. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/tools_yaml_config.py +3 -4
  14. ha_mcp_dev-9.2.0.dev3410/src/ha_mcp/tools/yaml_extra_keys.py +152 -0
  15. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/LICENSE +0 -0
  16. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/README.md +0 -0
  17. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/__init__.py +0 -0
  18. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/__main__.py +0 -0
  19. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_pypi_marker +0 -0
  20. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_rich_compat.py +0 -0
  21. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/__init__.py +0 -0
  22. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
  23. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
  24. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
  25. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
  26. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
  27. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
  28. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
  29. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
  30. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
  31. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
  32. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
  33. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
  34. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
  35. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
  36. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
  37. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
  38. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
  39. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
  40. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
  41. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev_security.py +0 -0
  42. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
  43. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
  44. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
  45. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
  46. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
  47. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
  48. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
  49. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
  50. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
  51. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
  52. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
  53. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
  54. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
  55. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
  56. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
  57. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
  58. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
  59. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
  60. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
  61. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
  62. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
  63. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
  64. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
  65. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
  66. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
  67. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
  68. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
  69. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
  70. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
  71. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
  72. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
  73. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
  74. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
  75. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
  76. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
  77. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
  78. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
  79. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
  80. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
  81. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
  82. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
  83. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/client/mixins/skills.py +0 -0
  84. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
  85. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
  86. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
  87. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
  88. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
  89. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
  90. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
  91. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
  92. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
  93. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
  94. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
  95. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
  96. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
  97. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
  98. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
  99. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
  100. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
  101. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
  102. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
  103. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
  104. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
  105. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
  106. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
  107. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
  108. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
  109. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
  110. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
  111. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
  112. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
  113. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
  114. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
  115. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
  116. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
  117. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
  118. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
  119. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
  120. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
  121. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/jev_search.py +0 -0
  122. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
  123. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
  124. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
  125. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
  126. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
  127. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
  128. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
  129. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
  130. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
  131. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
  132. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
  133. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
  134. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
  135. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
  136. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
  137. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
  138. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
  139. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
  140. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
  141. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
  142. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
  143. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
  144. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
  145. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
  146. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
  147. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
  148. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
  149. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
  150. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
  151. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
  152. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
  153. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
  154. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
  155. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
  156. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
  157. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
  158. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
  159. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
  160. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
  161. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
  162. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
  163. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
  164. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
  165. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
  166. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
  167. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
  168. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
  169. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
  170. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
  171. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
  172. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
  173. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
  174. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
  175. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
  176. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
  177. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
  178. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
  179. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
  180. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
  181. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
  182. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
  183. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
  184. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
  185. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
  186. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
  187. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
  188. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
  189. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
  190. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
  191. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
  192. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
  193. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
  194. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/mixins/extensions.py +0 -0
  195. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
  196. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
  197. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
  198. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
  199. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
  200. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
  201. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
  202. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
  203. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
  204. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
  205. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
  206. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
  207. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
  208. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
  209. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
  210. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
  211. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
  212. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
  213. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
  214. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
  215. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
  216. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
  217. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
  218. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
  219. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
  220. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
  221. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
  222. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
  223. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
  224. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
  225. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
  226. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
  227. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
  228. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
  229. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
  230. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
  231. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
  232. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
  233. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
  234. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
  235. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
  236. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
  237. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
  238. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
  239. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
  240. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
  241. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
  242. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
  243. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/skills/__init__.py +0 -0
  244. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/skills/_constants.py +0 -0
  245. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/skills/_resources.py +0 -0
  246. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/skills/_snapshot.py +0 -0
  247. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/skills/_source.py +0 -0
  248. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/skills/client.py +0 -0
  249. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/skills/extension.py +0 -0
  250. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/skills/models.py +0 -0
  251. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
  252. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
  253. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
  254. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
  255. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
  256. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
  257. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
  258. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
  259. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
  260. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
  261. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
  262. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
  263. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
  264. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
  265. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
  266. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
  267. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
  268. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
  269. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
  270. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
  271. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
  272. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
  273. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
  274. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
  275. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
  276. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
  277. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
  278. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
  279. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
  280. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
  281. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
  282. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
  283. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
  284. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
  285. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
  286. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
  287. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
  288. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
  289. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
  290. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
  291. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
  292. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
  293. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
  294. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
  295. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
  296. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
  297. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
  298. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
  299. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
  300. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
  301. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
  302. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
  303. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
  304. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
  305. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
  306. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
  307. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
  308. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
  309. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
  310. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
  311. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
  312. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
  313. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
  314. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
  315. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
  316. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
  317. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
  318. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
  319. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
  320. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
  321. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
  322. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
  323. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
  324. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
  325. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
  326. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
  327. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
  328. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
  329. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
  330. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
  331. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
  332. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
  333. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
  334. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
  335. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
  336. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
  337. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
  338. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
  339. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
  340. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
  341. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
  342. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
  343. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
  344. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
  345. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
  346. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
  347. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
  348. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
  349. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
  350. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
  351. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
  352. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
  353. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
  354. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
  355. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
  356. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
  357. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
  358. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
  359. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
  360. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
  361. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
  362. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
  363. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
  364. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
  365. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
  366. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
  367. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
  368. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
  369. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
  370. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
  371. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
  372. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
  373. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
  374. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
  375. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
  376. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
  377. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
  378. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
  379. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
  380. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
  381. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
  382. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
  383. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
  384. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
  385. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
  386. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
  387. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
  388. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
  389. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
  390. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
  391. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
  392. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
  393. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
  394. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
  395. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
  396. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
  397. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
  398. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
  399. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
  400. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
  401. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
  402. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
  403. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
  404. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
  405. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
  406. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
  407. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
  408. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/shared/_request_clock.py +0 -0
  409. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
  410. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
  411. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
  412. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
  413. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
  414. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
  415. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
  416. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
  417. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
  418. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
  419. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
  420. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
  421. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
  422. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
  423. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
  424. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
  425. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
  426. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
  427. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
  428. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
  429. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
  430. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
  431. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
  432. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
  433. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
  434. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
  435. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
  436. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
  437. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
  438. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
  439. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
  440. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
  441. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
  442. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
  443. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
  444. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
  445. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/requirements.txt +0 -0
  446. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
  447. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
  448. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
  449. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
  450. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
  451. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
  452. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
  453. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
  454. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
  455. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
  456. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
  457. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
  458. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
  459. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/client.py +0 -0
  460. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
  461. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
  462. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
  463. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
  464. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
  465. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
  466. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
  467. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
  468. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
  469. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
  470. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
  471. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
  472. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
  473. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
  474. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
  475. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
  476. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
  477. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
  478. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
  479. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
  480. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
  481. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
  482. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/server.py +0 -0
  483. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
  484. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
  485. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
  486. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
  487. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
  488. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
  489. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
  490. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
  491. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
  492. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
  493. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
  494. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
  495. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
  496. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
  497. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
  498. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
  499. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
  500. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
  501. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_vendor/websockets/version.py +0 -0
  502. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/_version.py +0 -0
  503. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/app_discovery.py +0 -0
  504. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/auth/__init__.py +0 -0
  505. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/auth/consent_form.py +0 -0
  506. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/auth/iss_stamp.py +0 -0
  507. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/auth/oidc_compat.py +0 -0
  508. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/auth/provider.py +0 -0
  509. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/backup_calendar.py +0 -0
  510. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/backup_dashboards.py +0 -0
  511. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/backup_diff.py +0 -0
  512. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/backup_entities.py +0 -0
  513. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/backup_entity_ids.py +0 -0
  514. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/backup_helper_target.py +0 -0
  515. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/backup_integrations.py +0 -0
  516. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/backup_tags.py +0 -0
  517. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/backup_todo.py +0 -0
  518. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/backup_zones.py +0 -0
  519. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/browser_landing.py +0 -0
  520. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/client/__init__.py +0 -0
  521. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/client/admin_routes.py +0 -0
  522. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/client/config_entry_read.py +0 -0
  523. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/client/error_log_journald.py +0 -0
  524. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/client/event_listeners.py +0 -0
  525. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/client/models.py +0 -0
  526. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/client/rest_client.py +0 -0
  527. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/client/supervisor_client.py +0 -0
  528. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/client/websocket_client.py +0 -0
  529. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/client/websocket_listener.py +0 -0
  530. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/client/websocket_state.py +0 -0
  531. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/config.py +0 -0
  532. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/config_backup.py +0 -0
  533. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/config_meta.py +0 -0
  534. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/config_overrides.py +0 -0
  535. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/config_registry.py +0 -0
  536. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/config_settings.py +0 -0
  537. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
  538. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
  539. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
  540. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/dashboard_screenshot/engine_compat.py +0 -0
  541. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
  542. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
  543. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/dashboard_screenshot/theme_check.py +0 -0
  544. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
  545. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/errors.py +0 -0
  546. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/ha_request_queue.py +0 -0
  547. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/hacs_auto_refresh.py +0 -0
  548. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/http_transport.py +0 -0
  549. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/image_info.py +0 -0
  550. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/ipv6_lan_guard.py +0 -0
  551. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/listen_sockets.py +0 -0
  552. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/llm_exposure.py +0 -0
  553. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/log_filters.py +0 -0
  554. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/mcp_client_context.py +0 -0
  555. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/policy/__init__.py +0 -0
  556. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/policy/approval_queue.py +0 -0
  557. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/policy/decision_pin.py +0 -0
  558. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/policy/decisions.py +0 -0
  559. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/policy/editing.py +0 -0
  560. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/policy/evaluator.py +0 -0
  561. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/policy/events.py +0 -0
  562. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/policy/handlers.py +0 -0
  563. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/policy/middleware.py +0 -0
  564. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/policy/model.py +0 -0
  565. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/policy/mrtr.py +0 -0
  566. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/policy/persistence.py +0 -0
  567. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/policy/server_channels.py +0 -0
  568. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/policy/value_sources.py +0 -0
  569. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/py.typed +0 -0
  570. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/read_only.py +0 -0
  571. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/redaction.py +0 -0
  572. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/renamed_tools.py +0 -0
  573. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  574. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  575. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
  576. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-actions.md +0 -0
  577. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
  578. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
  579. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  580. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  581. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  582. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  583. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  584. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  585. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  586. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
  587. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  588. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/triggers-and-conditions.md +0 -0
  589. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
  590. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/server.py +0 -0
  591. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/server_instructions.py +0 -0
  592. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/server_lifespan.py +0 -0
  593. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/server_tool_text.py +0 -0
  594. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/settings_ui/__init__.py +0 -0
  595. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
  596. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
  597. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
  598. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/settings_ui/_handlers_oauth_callbacks.py +0 -0
  599. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
  600. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
  601. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
  602. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/settings_ui/_i18n.py +0 -0
  603. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
  604. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/settings_ui/_persistence.py +0 -0
  605. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
  606. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/settings_ui/_theme.py +0 -0
  607. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
  608. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/settings_ui/locales/README.md +0 -0
  609. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/settings_ui/locales/az.json +0 -0
  610. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
  611. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/settings_ui/locales/de.json +0 -0
  612. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/settings_ui/locales/en.json +0 -0
  613. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
  614. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/settings_ui/locales/es.json +0 -0
  615. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
  616. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/settings_ui/locales/hu.json +0 -0
  617. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/settings_ui/locales/it.json +0 -0
  618. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
  619. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
  620. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
  621. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
  622. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
  623. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
  624. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
  625. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
  626. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/settings_ui/settings.css +0 -0
  627. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/settings_ui/settings.html +0 -0
  628. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/settings_ui/settings_js/01_i18n_state.js +0 -0
  629. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/settings_ui/settings_js/02_tools_restart.js +0 -0
  630. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/settings_ui/settings_js/03_render_save.js +0 -0
  631. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/settings_ui/settings_js/04_backups.js +0 -0
  632. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/settings_ui/settings_js/05_feature_flags.js +0 -0
  633. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/settings_ui/settings_js/06_policy_cards.js +0 -0
  634. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/settings_ui/settings_js/07_policy_actions.js +0 -0
  635. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/settings_ui/settings_js/08_advanced.js +0 -0
  636. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/settings_ui/settings_js/09_prefs_visibility.js +0 -0
  637. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/settings_ui/settings_js/10_oauth_callbacks.js +0 -0
  638. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/smoke_test.py +0 -0
  639. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  640. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/storage_helper_types.py +0 -0
  641. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/strict_bps.py +0 -0
  642. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tool_catalog.py +0 -0
  643. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tool_dispatch.py +0 -0
  644. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/__init__.py +0 -0
  645. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/addon_connection_hints.py +0 -0
  646. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/area_messages.py +0 -0
  647. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/automation_errors.py +0 -0
  648. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/automation_registry_details.py +0 -0
  649. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/backup.py +0 -0
  650. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/backup_access.py +0 -0
  651. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/backup_on_demand.py +0 -0
  652. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/backup_snapshot.py +0 -0
  653. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/backup_snapshot_restore.py +0 -0
  654. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  655. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/best_practice_result.py +0 -0
  656. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/best_practice_variables.py +0 -0
  657. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/blueprint_sources.py +0 -0
  658. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
  659. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/blueprint_write.py +0 -0
  660. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/bug_report_config.py +0 -0
  661. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/bug_report_redaction.py +0 -0
  662. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/bug_report_sources.py +0 -0
  663. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/bug_report_templates.py +0 -0
  664. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/bulk_selector.py +0 -0
  665. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/coercion.py +0 -0
  666. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/component_api.py +0 -0
  667. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/component_automation.py +0 -0
  668. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/component_config_entries.py +0 -0
  669. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/component_config_reads.py +0 -0
  670. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
  671. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/component_devices.py +0 -0
  672. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/component_helper_collections.py +0 -0
  673. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/component_registries.py +0 -0
  674. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
  675. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/component_todo.py +0 -0
  676. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/config_entry_backup.py +0 -0
  677. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/config_entry_flow.py +0 -0
  678. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/config_entry_flow_errors.py +0 -0
  679. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
  680. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/config_entry_flow_introspect.py +0 -0
  681. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
  682. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/config_entry_flow_progress.py +0 -0
  683. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
  684. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/config_entry_identity.py +0 -0
  685. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
  686. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/config_file_visibility.py +0 -0
  687. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/config_helpers/__init__.py +0 -0
  688. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/config_helpers/core_payload.py +0 -0
  689. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/config_helpers/create.py +0 -0
  690. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/config_helpers/describe.py +0 -0
  691. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/config_helpers/flow.py +0 -0
  692. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/config_helpers/icon_route.py +0 -0
  693. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/config_helpers/listing.py +0 -0
  694. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/config_helpers/registry.py +0 -0
  695. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/config_helpers/schemas.py +0 -0
  696. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/config_helpers/typed_config.py +0 -0
  697. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/config_helpers/update.py +0 -0
  698. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/config_helpers/validation.py +0 -0
  699. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/config_subentry_restore.py +0 -0
  700. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/config_write_errors.py +0 -0
  701. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/config_write_helpers.py +0 -0
  702. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/core_contract.py +0 -0
  703. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/dashboard_card_describe.py +0 -0
  704. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
  705. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/dashboard_list_checks.py +0 -0
  706. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/dashboard_read_errors.py +0 -0
  707. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/dev_backup.py +0 -0
  708. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/device_control.py +0 -0
  709. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/device_enrichment.py +0 -0
  710. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/diagnostics_helpers.py +0 -0
  711. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/energy_preferences.py +0 -0
  712. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/entity_expose_batch.py +0 -0
  713. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/entity_param_parsing.py +0 -0
  714. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/entity_registration.py +0 -0
  715. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/entity_removal.py +0 -0
  716. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/entity_update_fields.py +0 -0
  717. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/error_log_parsing.py +0 -0
  718. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/event_call.py +0 -0
  719. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/event_listener_fields.py +0 -0
  720. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/flow_helper_lookup.py +0 -0
  721. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/flow_translations.py +0 -0
  722. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/hacs_registration.py +0 -0
  723. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/helper_flows.py +0 -0
  724. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/helpers.py +0 -0
  725. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/history_response.py +0 -0
  726. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/ignored_entries.py +0 -0
  727. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/integration_entry_state.py +0 -0
  728. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/integration_flow_steps.py +0 -0
  729. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/integration_schema.py +0 -0
  730. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/integration_ws_commands.py +0 -0
  731. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/log_common.py +0 -0
  732. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/log_sources.py +0 -0
  733. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/log_sources_fault.py +0 -0
  734. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/log_sources_logbook.py +0 -0
  735. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
  736. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/radio/__init__.py +0 -0
  737. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/radio/base.py +0 -0
  738. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/radio/matter.py +0 -0
  739. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/radio/thread.py +0 -0
  740. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/radio/zigbee.py +0 -0
  741. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/radio/zwave.py +0 -0
  742. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/radio/zwave_parameters.py +0 -0
  743. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/recorder_errors.py +0 -0
  744. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/reference_validator.py +0 -0
  745. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/registry.py +0 -0
  746. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
  747. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/resource_codec.py +0 -0
  748. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/response_helpers.py +0 -0
  749. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/scene_discovery.py +0 -0
  750. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/search/__init__.py +0 -0
  751. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/search/base.py +0 -0
  752. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/search/component.py +0 -0
  753. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/search/entities.py +0 -0
  754. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/search/legacy.py +0 -0
  755. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/search/modes.py +0 -0
  756. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/search/overview.py +0 -0
  757. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/search/response.py +0 -0
  758. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/search/state.py +0 -0
  759. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/server_version.py +0 -0
  760. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  761. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  762. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  763. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
  764. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  765. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  766. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/smart_search/_flow_helpers.py +0 -0
  767. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
  768. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  769. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  770. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  771. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/statistics_calendar.py +0 -0
  772. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/statistics_helpers.py +0 -0
  773. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/statistics_resets.py +0 -0
  774. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/system_restart.py +0 -0
  775. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/tool_hints.py +0 -0
  776. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
  777. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/tools_addons.py +0 -0
  778. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/tools_areas.py +0 -0
  779. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
  780. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  781. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  782. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/tools_calendar.py +0 -0
  783. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/tools_camera.py +0 -0
  784. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/tools_categories.py +0 -0
  785. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/tools_code.py +0 -0
  786. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/tools_config_automations.py +0 -0
  787. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
  788. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  789. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
  790. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
  791. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
  792. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/tools_dev.py +0 -0
  793. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/tools_energy.py +0 -0
  794. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/tools_entities.py +0 -0
  795. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/tools_groups.py +0 -0
  796. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/tools_history.py +0 -0
  797. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/tools_integrations.py +0 -0
  798. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/tools_labels.py +0 -0
  799. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/tools_logs.py +0 -0
  800. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/tools_radio.py +0 -0
  801. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/tools_registry.py +0 -0
  802. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/tools_resources.py +0 -0
  803. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/tools_search.py +0 -0
  804. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/tools_security_policy.py +0 -0
  805. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/tools_service.py +0 -0
  806. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/tools_services.py +0 -0
  807. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/tools_system.py +0 -0
  808. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/tools_themes.py +0 -0
  809. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/tools_todo.py +0 -0
  810. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/tools_traces.py +0 -0
  811. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/tools_updates.py +0 -0
  812. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/tools_utility.py +0 -0
  813. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  814. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
  815. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/tools_zones.py +0 -0
  816. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/update_categories.py +0 -0
  817. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/util_helpers.py +0 -0
  818. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/validation_middleware.py +0 -0
  819. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/tools/ws_waiters.py +0 -0
  820. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/transforms/__init__.py +0 -0
  821. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/transforms/categorized_search.py +0 -0
  822. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/transforms/compact_params.py +0 -0
  823. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/transforms/component_helpers.py +0 -0
  824. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/transforms/component_search.py +0 -0
  825. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  826. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/transforms/write_tool_note.py +0 -0
  827. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/transport_security.py +0 -0
  828. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/update_check.py +0 -0
  829. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/utils/__init__.py +0 -0
  830. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/utils/config_hash.py +0 -0
  831. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/utils/config_write_lock.py +0 -0
  832. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/utils/dashboard_patch.py +0 -0
  833. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/utils/data_paths.py +0 -0
  834. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
  835. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/utils/domain_handlers.py +0 -0
  836. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/utils/entity_membership.py +0 -0
  837. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  838. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  839. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/utils/mcp_client_host.py +0 -0
  840. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/utils/operation_manager.py +0 -0
  841. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/utils/python_sandbox.py +0 -0
  842. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/utils/registry_update_lock.py +0 -0
  843. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/utils/skill_loader.py +0 -0
  844. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/utils/usage_logger.py +0 -0
  845. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/visibility/__init__.py +0 -0
  846. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/visibility/config_files.py +0 -0
  847. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/visibility/enforcement.py +0 -0
  848. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/visibility/identifier_aliases.py +0 -0
  849. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/visibility/model.py +0 -0
  850. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/src/ha_mcp/visibility/persistence.py +0 -0
  851. {ha_mcp_dev-9.1.2.dev3402 → ha_mcp_dev-9.2.0.dev3410}/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.2.dev3402
3
+ Version: 9.2.0.dev3410
4
4
  Summary: Configure and automate Home Assistant with Claude, ChatGPT, and other AI assistants.
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.2.dev3402"
7
+ version = "9.2.0.dev3410"
8
8
  description = "Configure and automate Home Assistant with Claude, ChatGPT, and other AI assistants."
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.2.dev3402"
7
+ version = "9.2.0.dev3410"
8
8
  description = "Configure and automate Home Assistant with Claude, ChatGPT, and other AI assistants."
9
9
  readme = "README.md"
10
10
  # Upper bound widened to <3.15 so the package installs on Home Assistant's
@@ -0,0 +1,88 @@
1
+ """Auto-backup fetch and restore for whole files (``file`` / ``yaml_file``).
2
+
3
+ Kept out of ``backup_manager.py``, which is at its module-size baseline.
4
+ """
5
+
6
+ from __future__ import annotations
7
+
8
+ from typing import Any
9
+
10
+ from .client.rest_client import HomeAssistantError
11
+
12
+ # The component flag that gates read_file's ``keep_line_endings`` field.
13
+ LINE_ENDINGS_CAPABILITY = "read_file_line_endings"
14
+
15
+
16
+ async def _fetch_file(
17
+ client: Any, entity_id: str, *, keep_line_endings: bool = False
18
+ ) -> Any:
19
+ """Read a file's current content via the read_file service.
20
+
21
+ ``entity_id`` is the file path. Returns the content string, or None
22
+ when the file does not exist — a brand-new write has no prior content
23
+ to snapshot, so capture skips (same as creating a new entity). A
24
+ binary file also returns None: snapshots store text only, so capture
25
+ skips it instead of blocking the write or delete. Other read failures
26
+ raise so the capture pipeline logs them at WARNING.
27
+ """
28
+ from .tools.auto_backup import PathNotAllowedError
29
+ from .tools.tools_filesystem import call_mcp_tools_service
30
+ from .tools.util_helpers import unwrap_service_response
31
+
32
+ service_data: dict[str, Any] = {"path": entity_id}
33
+ if keep_line_endings:
34
+ service_data["keep_line_endings"] = True
35
+ result = await call_mcp_tools_service(client, "read_file", service_data)
36
+ if not isinstance(result, dict):
37
+ return None
38
+ result = unwrap_service_response(result)
39
+ if result.get("success", False):
40
+ content = result.get("content")
41
+ return content if isinstance(content, str) else None
42
+ error = str(result.get("error", ""))
43
+ skips = ("does not exist", "not a file", "Cannot read binary file")
44
+ if any(marker in error for marker in skips):
45
+ return None
46
+ if error.startswith("Path not allowed"):
47
+ raise PathNotAllowedError(entity_id, error)
48
+ raise HomeAssistantError(f"read_file failed for {entity_id!r}: {error}")
49
+
50
+
51
+ async def _restore_file(client: Any, entity_id: str, config: Any) -> Any:
52
+ """Re-write a file's captured content via the write_file service."""
53
+ from .tools.tools_filesystem import call_mcp_tools_service
54
+ from .tools.util_helpers import unwrap_service_response
55
+
56
+ result = await call_mcp_tools_service(
57
+ client,
58
+ "write_file",
59
+ {
60
+ "path": entity_id,
61
+ "content": str(config),
62
+ "overwrite": True,
63
+ "create_dirs": True,
64
+ },
65
+ )
66
+ if isinstance(result, dict):
67
+ result = unwrap_service_response(result)
68
+ if not result.get("success", False):
69
+ raise HomeAssistantError(
70
+ f"write_file restore failed for {entity_id!r}: {result.get('error')}"
71
+ )
72
+ return result
73
+
74
+
75
+ async def _fetch_file_as_stored(client: Any, entity_id: str) -> Any:
76
+ """``_fetch_file`` for a snapshot: CRLF stays CRLF, so a restore is exact.
77
+
78
+ A component without the ``read_file_line_endings`` flag would refuse the
79
+ field, so it gets the LF read it always served.
80
+ """
81
+ from .tools.component_api import component_supports, get_component_caps
82
+
83
+ caps = await get_component_caps(client)
84
+ return await _fetch_file(
85
+ client,
86
+ entity_id,
87
+ keep_line_endings=component_supports(caps, LINE_ENDINGS_CAPABILITY),
88
+ )
@@ -95,6 +95,7 @@ from .backup_entity_ids import (
95
95
  update_with_registry_icon,
96
96
  with_registry_icon,
97
97
  )
98
+ from .backup_files import _fetch_file, _fetch_file_as_stored, _restore_file
98
99
  from .backup_helper_target import fetch_helper as _fetch_helper
99
100
  from .backup_helper_target import note_no_safety_backup as _note_no_safety_backup
100
101
  from .backup_helper_target import (
@@ -2475,60 +2476,6 @@ async def _registry_snapshot(client: Any, helper_type: str, item: dict) -> Any:
2475
2476
  # ``edit_yaml_config``. Both store the content as ``kind: "text"``.
2476
2477
 
2477
2478
 
2478
- async def _fetch_file(client: Any, entity_id: str) -> Any:
2479
- """Read a file's current content via the read_file service.
2480
-
2481
- ``entity_id`` is the file path. Returns the content string, or None
2482
- when the file does not exist — a brand-new write has no prior content
2483
- to snapshot, so capture skips (same as creating a new entity). A
2484
- binary file also returns None: snapshots store text only, so capture
2485
- skips it instead of blocking the write or delete. Other read failures
2486
- raise so the capture pipeline logs them at WARNING.
2487
- """
2488
- from .tools.auto_backup import PathNotAllowedError
2489
- from .tools.tools_filesystem import call_mcp_tools_service
2490
- from .tools.util_helpers import unwrap_service_response
2491
-
2492
- result = await call_mcp_tools_service(client, "read_file", {"path": entity_id})
2493
- if not isinstance(result, dict):
2494
- return None
2495
- result = unwrap_service_response(result)
2496
- if result.get("success", False):
2497
- content = result.get("content")
2498
- return content if isinstance(content, str) else None
2499
- error = str(result.get("error", ""))
2500
- skips = ("does not exist", "not a file", "Cannot read binary file")
2501
- if any(marker in error for marker in skips):
2502
- return None
2503
- if error.startswith("Path not allowed"):
2504
- raise PathNotAllowedError(entity_id, error)
2505
- raise HomeAssistantError(f"read_file failed for {entity_id!r}: {error}")
2506
-
2507
-
2508
- async def _restore_file(client: Any, entity_id: str, config: Any) -> Any:
2509
- """Re-write a file's captured content via the write_file service."""
2510
- from .tools.tools_filesystem import call_mcp_tools_service
2511
- from .tools.util_helpers import unwrap_service_response
2512
-
2513
- result = await call_mcp_tools_service(
2514
- client,
2515
- "write_file",
2516
- {
2517
- "path": entity_id,
2518
- "content": str(config),
2519
- "overwrite": True,
2520
- "create_dirs": True,
2521
- },
2522
- )
2523
- if isinstance(result, dict):
2524
- result = unwrap_service_response(result)
2525
- if not result.get("success", False):
2526
- raise HomeAssistantError(
2527
- f"write_file restore failed for {entity_id!r}: {result.get('error')}"
2528
- )
2529
- return result
2530
-
2531
-
2532
2479
  async def _fetch_yaml(client: Any, entity_id: str) -> Any:
2533
2480
  """Read the current YAML subtree for a ``{file}::{yaml_path}`` target.
2534
2481
 
@@ -2586,12 +2533,12 @@ async def _restore_yaml(client: Any, entity_id: str, config: Any) -> Any:
2586
2533
  and can therefore be left off.
2587
2534
  """
2588
2535
  from .config import get_global_settings
2589
- from .tools.tools_filesystem import (
2536
+ from .tools.tools_filesystem import call_mcp_tools_service
2537
+ from .tools.util_helpers import unwrap_service_response
2538
+ from .tools.yaml_extra_keys import (
2590
2539
  assert_extra_yaml_keys_supported,
2591
- call_mcp_tools_service,
2592
2540
  effective_extra_yaml_write_keys,
2593
2541
  )
2594
- from .tools.util_helpers import unwrap_service_response
2595
2542
 
2596
2543
  # Split on the LAST "::" (see _fetch_yaml) so an exotic file path
2597
2544
  # containing "::" still restores to the right file and key.
@@ -3601,12 +3548,12 @@ def register_default_handlers(mgr: BackupManager, _client: Any) -> None:
3601
3548
  mgr.register(DomainHandler("entity", fetch_entity, restore_entity))
3602
3549
  mgr.register(DomainHandler("device", _fetch_device, _restore_device))
3603
3550
  mgr.register(DomainHandler("integration", fetch_integration, restore_integration))
3604
- mgr.register(DomainHandler("file", _fetch_file, _restore_file))
3551
+ mgr.register(DomainHandler("file", _fetch_file_as_stored, _restore_file))
3605
3552
  mgr.register(DomainHandler("yaml", _fetch_yaml, _restore_yaml))
3606
3553
  # Whole-file YAML config: same fetch as "file" (read_file), but restored via
3607
3554
  # edit_yaml_config(replace_file) since write_file rejects config files.
3608
3555
  # Backs the legacy-restore write path and its pre-restore safety snapshot.
3609
- mgr.register(DomainHandler("yaml_file", _fetch_file, _restore_yaml_file))
3556
+ mgr.register(DomainHandler("yaml_file", _fetch_file_as_stored, _restore_yaml_file))
3610
3557
  # Blueprint files (#2329): the pre-write snapshot for
3611
3558
  # ha_manage_blueprints(action="delete" / "save").
3612
3559
  for blueprint_domain in ("automation", "script"):
@@ -43,6 +43,7 @@ from ..backup_manager import (
43
43
  )
44
44
  from ..config import get_global_settings
45
45
  from ..errors import TOOL_ERROR_LOG_LEVEL, ErrorCode, create_error_response
46
+ from ..utils.registry_update_lock import registry_update_lock
46
47
  from .helpers import raise_tool_error
47
48
  from .resource_patch import resource_write_lock
48
49
 
@@ -412,6 +413,11 @@ async def _template_write_context(
412
413
  Assistant UI or other processes are not serialized, so the snapshot can
413
414
  predate an edit made there that the write then replaces. The resource
414
415
  tools must not take the lock again: ``asyncio.Lock`` is not reentrant.
416
+
417
+ File tools share one lock rather than one per path, because a link and its
418
+ target are the same file under two names. YAML edits take it as well: a
419
+ theme file is written by both, and two snapshots taken before either write
420
+ would let a restore of the later one remove the earlier change.
415
421
  """
416
422
  # Both options-update tools take stable config-entry IDs. Alias-based helper
417
423
  # removal and dotted subentry targets have separate resolution paths.
@@ -425,6 +431,10 @@ async def _template_write_context(
425
431
  elif domain == "dashboard_resource" and entity_id:
426
432
  async with resource_write_lock(entity_id):
427
433
  yield
434
+ elif domain in ("file", "yaml") and entity_id:
435
+ # YAML edits too: ha_config_set_yaml and ha_write_file both write themes/.
436
+ async with registry_update_lock("file", "all_files"):
437
+ yield
428
438
  else:
429
439
  yield
430
440
 
@@ -0,0 +1,55 @@
1
+ """Turn an edit_file refusal into the structured error the edit tools share.
2
+
3
+ ``ha_config_set_dashboard_resource(edits=...)`` raises its refusals through
4
+ ``create_error_response`` with ``reason`` in the context; ``ha_write_file``
5
+ edits do the same, so both edit surfaces answer in one shape.
6
+ """
7
+
8
+ from typing import Any, NoReturn
9
+
10
+ from ..errors import ErrorCode, create_error_response
11
+ from .helpers import raise_tool_error
12
+
13
+ # Refusals of the edits themselves; any other reason is about the file or call.
14
+ _EDIT_REASONS = frozenset(
15
+ {"invalid_edit", "old_not_found", "old_not_unique", "line_endings_only"}
16
+ )
17
+ _CONTEXT_KEYS = (
18
+ "reason",
19
+ "edit_index",
20
+ "invalid_edit_indexes",
21
+ "matches",
22
+ "line_endings",
23
+ "parent",
24
+ )
25
+ _SUGGESTIONS = {
26
+ "invalid_edit": ["Every edit needs a non-empty 'old' that differs from its 'new'"],
27
+ "old_not_found": [
28
+ "Match the stored text exactly, including whitespace",
29
+ "Earlier edits apply first; account for text they changed",
30
+ "Read the current text with ha_read_file",
31
+ ],
32
+ "old_not_unique": ["Add surrounding context to 'old' so it matches once"],
33
+ "line_endings_only": ["Send the whole file with content= to change line endings"],
34
+ "not_found": ["Create the file with content= instead of edits"],
35
+ }
36
+
37
+
38
+ def raise_edit_file_refusal(result: dict[str, Any], path: str) -> NoReturn:
39
+ """Raise the component's ``success: false`` edit_file reply as a ToolError."""
40
+ reason = result.get("reason")
41
+ code = (
42
+ ErrorCode.VALIDATION_INVALID_PARAMETER
43
+ if reason in _EDIT_REASONS
44
+ else ErrorCode.SERVICE_CALL_FAILED
45
+ )
46
+ context: dict[str, Any] = {"path": path}
47
+ context.update({key: result[key] for key in _CONTEXT_KEYS if key in result})
48
+ raise_tool_error(
49
+ create_error_response(
50
+ code,
51
+ str(result.get("error") or "edit_file failed"),
52
+ suggestions=_SUGGESTIONS.get(str(reason)),
53
+ context=context,
54
+ )
55
+ )
@@ -5,6 +5,7 @@ integration and removes the ``hacs/*`` WebSocket commands. The HACS tools
5
5
  talk to whichever API the instance serves, Marketplace first.
6
6
  """
7
7
 
8
+ import re
8
9
  from dataclasses import dataclass, field
9
10
  from typing import Any, NoReturn
10
11
 
@@ -76,6 +77,47 @@ _GATE_SUGGESTIONS = {
76
77
  ],
77
78
  }
78
79
 
80
+ # Two store records claiming custom_components/ha_mcp_tools (#2993): the
81
+ # Marketplace refuses to update either, and refuses to uninstall a record while
82
+ # any HA-MCP config entry exists, disabled ones included. Both ways out were
83
+ # checked on a live instance; neither can be driven through this server.
84
+ DUPLICATE_RECORD_SUGGESTIONS = [
85
+ "A current HA-MCP integration files a repair for this under Settings > "
86
+ + "System > Repairs; its fix keeps homeassistant-ai/ha-mcp and marks the "
87
+ + "other record as not installed, with no change to entries or files. Ask "
88
+ + "the user to run it.",
89
+ "Without that repair: the store refuses to uninstall a record while any "
90
+ + "HA-MCP entry exists, disabled ones included, and this server cannot "
91
+ + "drive either route below. Ask the user before suggesting them.",
92
+ "Route 1 (no terminal): delete every HA-MCP entry under Settings > Devices "
93
+ + "& services, uninstall the duplicate record in the store, update the kept "
94
+ + "record, add the entries back and restart. An embedded server entry gets "
95
+ + "a new connect URL, so MCP clients reconnect.",
96
+ "Route 2 (keeps the entries): with Home Assistant Core stopped, set "
97
+ + '"installed": false on the duplicate record in '
98
+ + ".storage/marketplace.repositories (.storage/hacs.repositories on HACS), "
99
+ + "start Core, then update the kept record.",
100
+ ]
101
+ # Core's ``integration_owned`` message: "The {domain} directory belongs to
102
+ # {owner}." The store sends no error code for it, so the whole sentence is
103
+ # matched, owner as ``owner/repo``, never a fragment of some other message.
104
+ _OWNED_DIRECTORY = re.compile(
105
+ r"^(?:Command failed: )?The \S+ directory belongs to ([\w.-]+/[\w-][\w.-]*?)\.?$"
106
+ )
107
+
108
+
109
+ def _owned_directory_suggestions(owner: str) -> list[str]:
110
+ """The store refused an install because another installed record owns the
111
+ integration's directory: the owner is the record to install or update."""
112
+ return [
113
+ f"{owner} already provides this integration. Update or reinstall it "
114
+ f'there: ha_manage_hacs(action="download", repository_id="{owner}").',
115
+ "To switch repositories instead, uninstall the owner first; the store "
116
+ "refuses that while any of the integration's config entries exist, so "
117
+ "ask the user before deleting entries under Settings > Devices & "
118
+ "services.",
119
+ ]
120
+
79
121
 
80
122
  @dataclass(frozen=True)
81
123
  class StoreApi:
@@ -187,15 +229,37 @@ async def detect_store_api(ws_client: Any) -> StoreApi:
187
229
  return HACS_API # unreachable: raise_tool_error always raises
188
230
 
189
231
 
232
+ def is_owned_directory_refusal(err: HomeAssistantCommandError) -> bool:
233
+ """Whether the store refused because another installed record owns the
234
+ integration's directory."""
235
+ return _OWNED_DIRECTORY.match(str(err).strip()) is not None
236
+
237
+
190
238
  def raise_store_error(
191
- err: HomeAssistantCommandError, context: dict[str, Any]
239
+ err: HomeAssistantCommandError,
240
+ context: dict[str, Any],
241
+ *,
242
+ installed_records: list[str] | None = None,
192
243
  ) -> NoReturn:
193
244
  """Raise a store command failure; a Marketplace gate names the UI step.
194
245
 
195
246
  The gates are told apart by Core's error code: their messages ("Connect a
196
- GitHub account ...") would otherwise read as a connection failure.
247
+ GitHub account ...") would otherwise read as a connection failure. An
248
+ ownership refusal names the owner to update, unless the owner is one of
249
+ ha-mcp's own records and ``installed_records`` shows two of them
250
+ installed: then neither can be updated and the suggestions are the way
251
+ out of that. A refusal naming some other integration's owner keeps the
252
+ owner hint whatever ha-mcp's own records look like.
197
253
  """
198
- if suggestions := _GATE_SUGGESTIONS.get(err.code or ""):
254
+ suggestions = _GATE_SUGGESTIONS.get(err.code or "")
255
+ if match := _OWNED_DIRECTORY.match(str(err).strip()):
256
+ owners = {r.lower() for r in installed_records or []}
257
+ if len(owners) > 1 and match[1].lower() in owners:
258
+ suggestions = DUPLICATE_RECORD_SUGGESTIONS
259
+ context = {**context, "installed": installed_records}
260
+ else:
261
+ suggestions = _owned_directory_suggestions(match[1])
262
+ if suggestions:
199
263
  raise_tool_error(
200
264
  create_error_response(
201
265
  ErrorCode.SERVICE_CALL_FAILED,
@@ -0,0 +1,162 @@
1
+ """Keep ha-mcp's own integration on the one store repository that owns it.
2
+
3
+ Two repositories carry the ``ha_mcp_tools`` component: the main repository,
4
+ which the default catalog lists, and the legacy distribution mirror earlier
5
+ installs came from. Both extract to ``custom_components/ha_mcp_tools``. The
6
+ Marketplace (Home Assistant 2026.11+) refuses to install a repository whose
7
+ integration another installed repository owns. HACS never checked, so a
8
+ download of the second repository on Home Assistant 2026.10 or older left both
9
+ records claiming the directory, and after the 2026.11 upgrade the Marketplace
10
+ refuses to update either (#2993). The server's own install guidance names the
11
+ main repository, so a download of either repository goes to the one that is
12
+ installed.
13
+ """
14
+
15
+ from __future__ import annotations
16
+
17
+ import re
18
+ from typing import Any
19
+
20
+ from ..client.rest_client import HomeAssistantCommandError, HomeAssistantCommandTimeout
21
+ from ..errors import ErrorCode, create_error_response
22
+ from ..hacs_auto_refresh import CANDIDATE_REPO_FULL_NAMES
23
+ from .hacs_backend import StoreApi, is_owned_directory_refusal
24
+ from .helpers import raise_tool_error
25
+
26
+ MAIN_REPOSITORY = "homeassistant-ai/ha-mcp"
27
+ MIRROR_REPOSITORY = "homeassistant-ai/ha-mcp-integration"
28
+ # The stores use the GitHub repository id, fixed for a repository's lifetime.
29
+ OWN_REPOSITORY_IDS = {"1056618941": MAIN_REPOSITORY, "1289599380": MIRROR_REPOSITORY}
30
+
31
+ # The two repositories tag releases alike, but not development builds:
32
+ # publish-dev.yml tags the main repository ``v<next>.dev<N>`` while
33
+ # sync-integration-mirror.yml tags the mirror ``v<next>-dev.<N>``.
34
+ _MAIN_DEV_REF = re.compile(r"^(v?\d+\.\d+\.\d+)\.dev(\d+)$")
35
+ _MIRROR_DEV_REF = re.compile(r"^(v?\d+\.\d+\.\d+)-dev\.(\d+)$")
36
+ _RELEASE_REF = re.compile(r"^v?(\d+)\.(\d+)\.(\d+)")
37
+ # From 9.0 both repositories tag a release with the server version; before
38
+ # that the mirror carried the component's own numbers (v2.2.1 for 8.6.0).
39
+ _SHARED_TAGS_SINCE = (9, 0, 0)
40
+
41
+
42
+ def _tagged_alike(version: str) -> bool:
43
+ match = _RELEASE_REF.match(version)
44
+ if match is None:
45
+ return False
46
+ return tuple(int(p) for p in match.groups()) >= _SHARED_TAGS_SINCE
47
+
48
+
49
+ def translate_version(version: str | None, target: str) -> str | None:
50
+ """The same release named the way ``target`` tags it."""
51
+ if not version:
52
+ return version
53
+ if target.lower() == MIRROR_REPOSITORY and (match := _MAIN_DEV_REF.match(version)):
54
+ return f"{match[1]}-dev.{match[2]}"
55
+ if target.lower() == MAIN_REPOSITORY and (match := _MIRROR_DEV_REF.match(version)):
56
+ return f"{match[1]}.dev{match[2]}"
57
+ return version
58
+
59
+
60
+ def _own_name(repo: dict[str, Any]) -> str | None:
61
+ full_name = (repo.get("full_name") or "").lower()
62
+ if full_name in {n.lower() for n in CANDIDATE_REPO_FULL_NAMES}:
63
+ return full_name
64
+ return None
65
+
66
+
67
+ async def installed_own_records(
68
+ ws_client: Any, api: StoreApi
69
+ ) -> list[dict[str, Any]] | None:
70
+ """The store's records for ha-mcp's own repositories that are installed,
71
+ or None when the store could not be asked."""
72
+ try:
73
+ response = await ws_client.send_command(api.command("list"))
74
+ except (HomeAssistantCommandError, HomeAssistantCommandTimeout):
75
+ return None
76
+ listed = response.get("result") if isinstance(response, dict) else None
77
+ repos = [dict(r) for r in (listed or []) if isinstance(r, dict)]
78
+ return [r for r in repos if _own_name(r) and r.get("installed")]
79
+
80
+
81
+ async def ownership_refusal_records(
82
+ ws_client: Any, api: StoreApi, err: HomeAssistantCommandError
83
+ ) -> list[str] | None:
84
+ """For a store refusal, the installed own records' names, so the refusal
85
+ can be explained; None for any other error, with no store call."""
86
+ if not is_owned_directory_refusal(err):
87
+ return None
88
+ records = await installed_own_records(ws_client, api)
89
+ return [str(r.get("full_name")) for r in records or []]
90
+
91
+
92
+ async def route_own_repository_download(
93
+ ws_client: Any, api: StoreApi, repository_id: str, version: str | None
94
+ ) -> tuple[str, str | None, str | None]:
95
+ """Return the repository and version to download, and a note when rerouted.
96
+
97
+ A repository that is not ha-mcp's own, by name or by id, passes through
98
+ with no store call, so a download stays one store command. For ha-mcp's
99
+ own, the installed one wins: a request for the other repository is
100
+ rerouted to it, so the mirror keeps updating from the mirror and the main
101
+ repository from the catalog, and a development ref is renamed the way the
102
+ target tags it. With two installed records the store decides: the
103
+ Marketplace refuses the download itself and that refusal is explained
104
+ where it is raised; HACS still downloads, with a warning.
105
+ """
106
+ wanted = repository_id.strip().lower()
107
+ wanted = OWN_REPOSITORY_IDS.get(wanted, wanted)
108
+ if wanted not in {n.lower() for n in CANDIDATE_REPO_FULL_NAMES}:
109
+ return repository_id, version, None
110
+
111
+ installed = await installed_own_records(ws_client, api)
112
+ if installed is None:
113
+ # The download itself reports the store's trouble, with its own context
114
+ return repository_id, version, None
115
+ if len(installed) > 1:
116
+ if api.is_marketplace:
117
+ # The Marketplace refuses this download itself; raise_store_error
118
+ # explains the refusal with the way out.
119
+ return repository_id, version, None
120
+ names = " and ".join(str(r.get("full_name")) for r in installed)
121
+ # HACS never checked ownership, so the download still works there and
122
+ # is the way to bring in the release whose repair keeps one listing.
123
+ note = (
124
+ f"{names} are both installed and both claim "
125
+ "custom_components/ha_mcp_tools. HACS still updates either, but the "
126
+ "Marketplace in Home Assistant 2026.11 will refuse to. After this "
127
+ "download restart Home Assistant and run the repair under Settings > "
128
+ f"System > Repairs, which keeps {MAIN_REPOSITORY}. If no repair "
129
+ "appears, the installed release predates it: update to a current "
130
+ "release or follow the manual route in the FAQ."
131
+ )
132
+ return repository_id, version, note
133
+ if not installed or _own_name(installed[0]) == wanted:
134
+ return repository_id, version, None
135
+ owner = str(installed[0].get("full_name"))
136
+ if version and not _tagged_alike(version):
137
+ raise_tool_error(
138
+ create_error_response(
139
+ ErrorCode.VALIDATION_INVALID_PARAMETER,
140
+ f"{owner} owns custom_components/ha_mcp_tools, and releases "
141
+ f"before {'.'.join(map(str, _SHARED_TAGS_SINCE))} are tagged "
142
+ f"differently there, so {version} cannot be mapped to it.",
143
+ suggestions=[
144
+ "Pick a version from the installed repository: "
145
+ 'ha_get_hacs_info(action="info", '
146
+ f'repository_id="{owner}", include_releases=True), then '
147
+ f'ha_manage_hacs(action="download", repository_id="{owner}", '
148
+ 'version="<one of its tags>").',
149
+ "Or omit version to install its latest release.",
150
+ ],
151
+ context={"repository_id": repository_id, "version": version},
152
+ )
153
+ )
154
+ target_version = translate_version(version, owner)
155
+ note = (
156
+ f"{repository_id} was rerouted to {owner}, which already owns "
157
+ "custom_components/ha_mcp_tools; HA-MCP stays on the one listing it "
158
+ "was installed from."
159
+ )
160
+ if target_version != version:
161
+ note += f" The version was renamed from {version} to {target_version}."
162
+ return owner, target_version, note
@@ -44,7 +44,7 @@ def resource_write_lock(resource_id: str | None) -> AbstractAsyncContextManager[
44
44
 
45
45
 
46
46
  class ResourceEdit(TypedDict):
47
- """One exact-match replacement in an inline resource."""
47
+ """One exact-match replacement."""
48
48
 
49
49
  old: Annotated[
50
50
  str,