ha-mcp-dev 8.6.0.dev2844__tar.gz → 8.6.0.dev2847__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 (712) hide show
  1. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/PKG-INFO +1 -1
  2. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/pyproject.toml +1 -1
  3. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/pyproject.toml.orig +1 -1
  4. ha_mcp_dev-8.6.0.dev2847/src/ha_mcp/config.py +396 -0
  5. ha_mcp_dev-8.6.0.dev2847/src/ha_mcp/config_backup.py +258 -0
  6. ha_mcp_dev-8.6.0.dev2847/src/ha_mcp/config_overrides.py +502 -0
  7. ha_mcp_dev-8.6.0.dev2847/src/ha_mcp/config_registry.py +493 -0
  8. ha_mcp_dev-8.6.0.dev2847/src/ha_mcp/config_settings.py +643 -0
  9. ha_mcp_dev-8.6.0.dev2844/src/ha_mcp/config.py +0 -2157
  10. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/LICENSE +0 -0
  11. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/README.md +0 -0
  12. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/__init__.py +0 -0
  13. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/__main__.py +0 -0
  14. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_pypi_marker +0 -0
  15. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_rich_compat.py +0 -0
  16. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/__init__.py +0 -0
  17. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
  18. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
  19. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
  20. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
  21. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
  22. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
  23. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
  24. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
  25. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
  26. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
  27. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
  28. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
  29. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
  30. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
  31. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
  32. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
  33. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
  34. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
  35. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
  36. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
  37. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
  38. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
  39. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
  40. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
  41. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
  42. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
  43. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
  44. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
  45. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
  46. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
  47. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
  48. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
  49. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
  50. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
  51. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
  52. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
  53. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
  54. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
  55. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
  56. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
  57. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
  58. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
  59. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
  60. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
  61. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
  62. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
  63. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
  64. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
  65. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
  66. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
  67. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
  68. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
  69. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
  70. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
  71. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
  72. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
  73. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
  74. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
  75. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
  76. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
  77. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
  78. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
  79. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
  80. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
  81. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
  82. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
  83. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
  84. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
  85. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
  86. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
  87. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
  88. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
  89. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
  90. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
  91. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
  92. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
  93. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
  94. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
  95. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
  96. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
  97. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
  98. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
  99. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
  100. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
  101. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
  102. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
  103. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
  104. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
  105. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
  106. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
  107. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
  108. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
  109. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
  110. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
  111. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
  112. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
  113. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
  114. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
  115. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
  116. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
  117. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
  118. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
  119. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
  120. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
  121. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
  122. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
  123. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
  124. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
  125. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
  126. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
  127. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
  128. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
  129. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
  130. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
  131. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
  132. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
  133. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
  134. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
  135. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
  136. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
  137. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
  138. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
  139. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
  140. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
  141. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
  142. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
  143. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
  144. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
  145. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
  146. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
  147. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
  148. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
  149. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
  150. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
  151. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
  152. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
  153. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
  154. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
  155. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
  156. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
  157. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
  158. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
  159. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
  160. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
  161. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
  162. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
  163. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
  164. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
  165. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
  166. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
  167. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
  168. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
  169. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
  170. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
  171. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
  172. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
  173. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
  174. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
  175. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
  176. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
  177. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
  178. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
  179. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
  180. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
  181. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
  182. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
  183. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
  184. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
  185. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
  186. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
  187. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
  188. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
  189. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
  190. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
  191. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
  192. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
  193. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
  194. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
  195. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
  196. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
  197. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
  198. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
  199. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
  200. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
  201. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
  202. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
  203. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
  204. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
  205. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
  206. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
  207. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
  208. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
  209. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
  210. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
  211. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
  212. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
  213. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
  214. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
  215. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
  216. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
  217. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
  218. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
  219. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
  220. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
  221. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
  222. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
  223. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
  224. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
  225. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
  226. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
  227. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
  228. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
  229. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
  230. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
  231. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
  232. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
  233. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
  234. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
  235. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
  236. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
  237. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
  238. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
  239. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
  240. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
  241. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
  242. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
  243. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
  244. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
  245. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
  246. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
  247. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
  248. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
  249. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
  250. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
  251. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
  252. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
  253. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
  254. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
  255. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
  256. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
  257. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
  258. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
  259. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
  260. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
  261. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
  262. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
  263. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
  264. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
  265. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
  266. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
  267. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
  268. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
  269. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
  270. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
  271. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
  272. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
  273. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
  274. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
  275. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
  276. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
  277. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
  278. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
  279. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
  280. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
  281. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
  282. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
  283. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
  284. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
  285. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
  286. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
  287. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
  288. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
  289. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
  290. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
  291. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
  292. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
  293. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
  294. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
  295. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
  296. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
  297. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
  298. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
  299. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
  300. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
  301. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
  302. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
  303. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
  304. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
  305. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
  306. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
  307. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
  308. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
  309. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
  310. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
  311. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
  312. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
  313. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
  314. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
  315. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
  316. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
  317. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
  318. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
  319. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
  320. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
  321. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
  322. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
  323. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
  324. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
  325. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
  326. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
  327. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
  328. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
  329. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
  330. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
  331. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
  332. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
  333. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
  334. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
  335. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
  336. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
  337. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
  338. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
  339. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
  340. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
  341. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
  342. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
  343. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
  344. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
  345. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
  346. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
  347. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
  348. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
  349. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
  350. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
  351. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
  352. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
  353. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
  354. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
  355. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
  356. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
  357. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
  358. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
  359. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
  360. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
  361. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
  362. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
  363. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
  364. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
  365. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
  366. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
  367. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
  368. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
  369. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
  370. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
  371. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
  372. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
  373. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
  374. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
  375. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
  376. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
  377. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
  378. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
  379. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
  380. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
  381. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
  382. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
  383. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
  384. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
  385. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
  386. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
  387. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
  388. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
  389. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
  390. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
  391. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
  392. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
  393. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
  394. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
  395. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
  396. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
  397. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
  398. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
  399. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
  400. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
  401. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
  402. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
  403. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
  404. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
  405. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
  406. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
  407. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
  408. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
  409. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
  410. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
  411. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
  412. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
  413. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
  414. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
  415. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
  416. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
  417. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
  418. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
  419. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
  420. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
  421. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
  422. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
  423. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
  424. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
  425. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
  426. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
  427. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/requirements.txt +0 -0
  428. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
  429. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
  430. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
  431. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
  432. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
  433. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
  434. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
  435. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
  436. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
  437. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
  438. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
  439. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
  440. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
  441. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/client.py +0 -0
  442. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
  443. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
  444. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
  445. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
  446. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
  447. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
  448. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
  449. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
  450. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
  451. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
  452. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
  453. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
  454. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
  455. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
  456. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
  457. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
  458. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
  459. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
  460. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
  461. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
  462. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
  463. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
  464. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/server.py +0 -0
  465. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
  466. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
  467. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
  468. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
  469. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
  470. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
  471. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
  472. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
  473. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
  474. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
  475. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
  476. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
  477. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
  478. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
  479. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
  480. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
  481. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
  482. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
  483. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_vendor/websockets/version.py +0 -0
  484. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/_version.py +0 -0
  485. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/auth/__init__.py +0 -0
  486. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/auth/consent_form.py +0 -0
  487. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/auth/oidc_compat.py +0 -0
  488. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/auth/provider.py +0 -0
  489. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/backup_manager.py +0 -0
  490. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/browser_landing.py +0 -0
  491. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/client/__init__.py +0 -0
  492. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/client/admin_routes.py +0 -0
  493. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/client/rest_client.py +0 -0
  494. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/client/supervisor_client.py +0 -0
  495. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/client/websocket_client.py +0 -0
  496. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/client/websocket_listener.py +0 -0
  497. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
  498. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
  499. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
  500. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
  501. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
  502. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
  503. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/errors.py +0 -0
  504. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/ha_request_queue.py +0 -0
  505. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/hacs_auto_refresh.py +0 -0
  506. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/http_transport.py +0 -0
  507. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/llm_exposure.py +0 -0
  508. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/log_filters.py +0 -0
  509. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/policy/__init__.py +0 -0
  510. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/policy/approval_queue.py +0 -0
  511. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/policy/decision_pin.py +0 -0
  512. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/policy/decisions.py +0 -0
  513. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/policy/editing.py +0 -0
  514. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/policy/evaluator.py +0 -0
  515. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/policy/events.py +0 -0
  516. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/policy/handlers.py +0 -0
  517. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/policy/middleware.py +0 -0
  518. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/policy/model.py +0 -0
  519. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/policy/persistence.py +0 -0
  520. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/policy/server_channels.py +0 -0
  521. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/policy/value_sources.py +0 -0
  522. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/py.typed +0 -0
  523. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/read_only.py +0 -0
  524. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/redaction.py +0 -0
  525. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/renamed_tools.py +0 -0
  526. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  527. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  528. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
  529. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-actions.md +0 -0
  530. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
  531. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
  532. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  533. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  534. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  535. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  536. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  537. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  538. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  539. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
  540. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  541. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/triggers-and-conditions.md +0 -0
  542. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
  543. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/server.py +0 -0
  544. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/server_lifespan.py +0 -0
  545. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/settings_ui/__init__.py +0 -0
  546. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
  547. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
  548. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
  549. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
  550. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
  551. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
  552. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/settings_ui/_i18n.py +0 -0
  553. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
  554. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/settings_ui/_persistence.py +0 -0
  555. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
  556. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/settings_ui/_theme.py +0 -0
  557. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
  558. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/settings_ui/locales/README.md +0 -0
  559. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/settings_ui/locales/az.json +0 -0
  560. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
  561. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/settings_ui/locales/de.json +0 -0
  562. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/settings_ui/locales/en.json +0 -0
  563. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
  564. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/settings_ui/locales/es.json +0 -0
  565. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
  566. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/settings_ui/locales/it.json +0 -0
  567. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
  568. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
  569. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
  570. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
  571. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
  572. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
  573. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
  574. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
  575. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/settings_ui/settings.css +0 -0
  576. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/settings_ui/settings.html +0 -0
  577. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/settings_ui/settings.js +0 -0
  578. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/smoke_test.py +0 -0
  579. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  580. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/strict_bps.py +0 -0
  581. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tool_dispatch.py +0 -0
  582. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/__init__.py +0 -0
  583. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/auto_backup.py +0 -0
  584. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/backup.py +0 -0
  585. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  586. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/best_practice_result.py +0 -0
  587. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/best_practice_variables.py +0 -0
  588. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/blueprint_sources.py +0 -0
  589. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
  590. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/blueprint_write.py +0 -0
  591. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/bulk_selector.py +0 -0
  592. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/component_api.py +0 -0
  593. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/component_config_entries.py +0 -0
  594. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/component_config_reads.py +0 -0
  595. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
  596. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/component_devices.py +0 -0
  597. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/component_registries.py +0 -0
  598. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
  599. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/config_entry_flow.py +0 -0
  600. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
  601. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
  602. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
  603. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/config_entry_identity.py +0 -0
  604. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
  605. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
  606. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
  607. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/dashboard_list_checks.py +0 -0
  608. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/device_control.py +0 -0
  609. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/device_enrichment.py +0 -0
  610. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/entity_registration.py +0 -0
  611. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/entity_update_fields.py +0 -0
  612. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/error_log_parsing.py +0 -0
  613. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/hacs_registration.py +0 -0
  614. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/helpers.py +0 -0
  615. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
  616. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/log_common.py +0 -0
  617. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/log_sources.py +0 -0
  618. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/log_sources_fault.py +0 -0
  619. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
  620. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/radio/__init__.py +0 -0
  621. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/radio/base.py +0 -0
  622. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/radio/matter.py +0 -0
  623. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/radio/thread.py +0 -0
  624. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/radio/zigbee.py +0 -0
  625. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/radio/zwave.py +0 -0
  626. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/reference_validator.py +0 -0
  627. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/registry.py +0 -0
  628. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
  629. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/scene_discovery.py +0 -0
  630. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  631. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  632. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  633. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
  634. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  635. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  636. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
  637. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  638. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  639. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  640. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
  641. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/tools_addons.py +0 -0
  642. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/tools_areas.py +0 -0
  643. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
  644. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  645. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  646. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/tools_calendar.py +0 -0
  647. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/tools_camera.py +0 -0
  648. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/tools_categories.py +0 -0
  649. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/tools_code.py +0 -0
  650. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/tools_config_automations.py +0 -0
  651. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
  652. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  653. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
  654. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
  655. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
  656. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/tools_dev.py +0 -0
  657. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/tools_energy.py +0 -0
  658. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/tools_entities.py +0 -0
  659. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  660. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/tools_groups.py +0 -0
  661. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/tools_hacs.py +0 -0
  662. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/tools_history.py +0 -0
  663. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/tools_integrations.py +0 -0
  664. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/tools_labels.py +0 -0
  665. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/tools_logs.py +0 -0
  666. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/tools_radio.py +0 -0
  667. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/tools_registry.py +0 -0
  668. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/tools_resources.py +0 -0
  669. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/tools_search.py +0 -0
  670. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/tools_security_policy.py +0 -0
  671. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/tools_service.py +0 -0
  672. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/tools_services.py +0 -0
  673. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/tools_system.py +0 -0
  674. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/tools_themes.py +0 -0
  675. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/tools_todo.py +0 -0
  676. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/tools_traces.py +0 -0
  677. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/tools_updates.py +0 -0
  678. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/tools_utility.py +0 -0
  679. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  680. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  681. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
  682. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/tools_zones.py +0 -0
  683. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/util_helpers.py +0 -0
  684. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/tools/validation_middleware.py +0 -0
  685. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/transforms/__init__.py +0 -0
  686. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/transforms/categorized_search.py +0 -0
  687. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/transforms/component_search.py +0 -0
  688. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  689. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/transforms/write_tool_note.py +0 -0
  690. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/transport_security.py +0 -0
  691. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/update_check.py +0 -0
  692. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/utils/__init__.py +0 -0
  693. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/utils/config_hash.py +0 -0
  694. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/utils/config_write_lock.py +0 -0
  695. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/utils/dashboard_patch.py +0 -0
  696. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/utils/data_paths.py +0 -0
  697. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
  698. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/utils/domain_handlers.py +0 -0
  699. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/utils/entity_membership.py +0 -0
  700. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  701. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  702. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/utils/mcp_client_host.py +0 -0
  703. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/utils/operation_manager.py +0 -0
  704. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/utils/python_sandbox.py +0 -0
  705. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/utils/registry_update_lock.py +0 -0
  706. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/utils/skill_loader.py +0 -0
  707. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/utils/usage_logger.py +0 -0
  708. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/visibility/__init__.py +0 -0
  709. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/visibility/enforcement.py +0 -0
  710. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/visibility/model.py +0 -0
  711. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/visibility/persistence.py +0 -0
  712. {ha_mcp_dev-8.6.0.dev2844 → ha_mcp_dev-8.6.0.dev2847}/src/ha_mcp/visibility/resolver.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ha-mcp-dev
3
- Version: 8.6.0.dev2844
3
+ Version: 8.6.0.dev2847
4
4
  Summary: Home Assistant MCP Server - Complete control of Home Assistant through MCP
5
5
  Keywords: mcp,home-assistant,ai,automation,smart-home
6
6
  Author: Julien
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "8.6.0.dev2844"
7
+ version = "8.6.0.dev2847"
8
8
  description = "Home Assistant MCP Server - Complete control of Home Assistant through MCP"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13,<3.15"
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "8.6.0.dev2844"
7
+ version = "8.6.0.dev2847"
8
8
  description = "Home Assistant MCP Server - Complete control of Home Assistant through MCP"
9
9
  readme = "README.md"
10
10
  # Upper bound widened to <3.15 so the package installs on Home Assistant's
@@ -0,0 +1,396 @@
1
+ """
2
+ Configuration management for Home Assistant MCP Server.
3
+
4
+ The ``Settings`` model, the runtime-editable registries and the override
5
+ loaders live in the ``config_*`` modules and are re-exported here. This
6
+ module holds the settings singleton and the embedded-mode connection.
7
+ """
8
+
9
+ # isort: off
10
+ from ha_mcp.config_backup import (
11
+ _apply_backup_overrides as _apply_backup_overrides,
12
+ get_backup_setting_origin as get_backup_setting_origin,
13
+ )
14
+ from ha_mcp.config_overrides import (
15
+ _BETA_GATE_LOGGED as _BETA_GATE_LOGGED,
16
+ _apply_advanced_overrides as _apply_advanced_overrides,
17
+ _apply_feature_flag_overrides as _apply_feature_flag_overrides,
18
+ _coerce_advanced_override_value as _coerce_advanced_override_value,
19
+ _read_feature_flag_override_file as _read_feature_flag_override_file,
20
+ get_feature_flag_origin as get_feature_flag_origin,
21
+ )
22
+ from ha_mcp.config_registry import (
23
+ _ADVANCED_SETTINGS_BOUNDS as _ADVANCED_SETTINGS_BOUNDS,
24
+ _ADVANCED_SETTINGS_CHOICES as _ADVANCED_SETTINGS_CHOICES,
25
+ _ADVANCED_SETTINGS_SENTINELS as _ADVANCED_SETTINGS_SENTINELS,
26
+ _FEATURE_FLAG_INT_BOUNDS as _FEATURE_FLAG_INT_BOUNDS,
27
+ _FEATURE_FLAG_OVERRIDE_FILENAME as _FEATURE_FLAG_OVERRIDE_FILENAME,
28
+ ADDON_SYNCED_ADVANCED_FIELDS as ADDON_SYNCED_ADVANCED_FIELDS,
29
+ ADVANCED_SETTINGS_FIELDS as ADVANCED_SETTINGS_FIELDS,
30
+ BACKUP_OVERRIDE_FIELDS as BACKUP_OVERRIDE_FIELDS,
31
+ BETA_FEATURE_FIELDS as BETA_FEATURE_FIELDS,
32
+ FEATURE_FLAG_FIELDS as FEATURE_FLAG_FIELDS,
33
+ AdvancedField as AdvancedField,
34
+ BackupOverrideField as BackupOverrideField,
35
+ FeatureFlagField as FeatureFlagField,
36
+ )
37
+ from ha_mcp.config_settings import (
38
+ _PACKAGE_VERSION as _PACKAGE_VERSION,
39
+ OAUTH_MODE_TOKEN as OAUTH_MODE_TOKEN,
40
+ OAUTH_MODE_URL as OAUTH_MODE_URL,
41
+ Settings as Settings,
42
+ get_settings as get_settings,
43
+ )
44
+ # isort: on
45
+
46
+ __all__ = [
47
+ "ADDON_SYNCED_ADVANCED_FIELDS",
48
+ "ADVANCED_SETTINGS_FIELDS",
49
+ "BACKUP_OVERRIDE_FIELDS",
50
+ "BETA_FEATURE_FIELDS",
51
+ "FEATURE_FLAG_FIELDS",
52
+ "OAUTH_MODE_TOKEN",
53
+ "OAUTH_MODE_URL",
54
+ "_ADVANCED_SETTINGS_BOUNDS",
55
+ "_ADVANCED_SETTINGS_CHOICES",
56
+ "_ADVANCED_SETTINGS_SENTINELS",
57
+ "_FEATURE_FLAG_INT_BOUNDS",
58
+ "_FEATURE_FLAG_OVERRIDE_FILENAME",
59
+ "_PACKAGE_VERSION",
60
+ "BackupOverrideField",
61
+ "FeatureFlagField",
62
+ "Settings",
63
+ "_coerce_advanced_override_value",
64
+ "_read_feature_flag_override_file",
65
+ "_reset_global_settings",
66
+ "_settings",
67
+ "get_backup_setting_origin",
68
+ "get_embedded_config_dir",
69
+ "get_feature_flag_origin",
70
+ "get_global_settings",
71
+ "get_settings",
72
+ "parse_extra_yaml_write_keys",
73
+ "reset_global_settings",
74
+ "set_embedded_connection",
75
+ "should_emit_llm_api_metadata",
76
+ ]
77
+
78
+
79
+ def parse_extra_yaml_write_keys(settings: "Settings") -> list[str]:
80
+ """Parse ``extra_yaml_write_keys`` into a clean key list (#1887).
81
+
82
+ Whitespace and empty entries are dropped and the result is deduplicated
83
+ and sorted, so the service payload is deterministic and unaffected by how
84
+ the operator spaced the setting.
85
+
86
+ The component's ``YAML_KEY_DENYLIST`` is NOT applied here: that floor
87
+ lives component-side, in the layer that authorizes the write. Mirroring it
88
+ would mean a second copy to keep in lockstep for no gain: a denied key sent
89
+ on the wire is dropped there anyway.
90
+
91
+ Lives in this module rather than next to the YAML tool because the backup
92
+ restore path needs it too, and ``backup_manager`` importing a ``tools_*``
93
+ module would add an import edge that binds ``tools_yaml_config``'s
94
+ module-level names at restore time.
95
+ """
96
+ # Direct attribute access, matching ``_disabled_packages_keys``: a future
97
+ # rename must raise loudly rather than silently return an empty list,
98
+ # which would read as "the operator configured nothing".
99
+ raw = settings.extra_yaml_write_keys or ""
100
+ return sorted({segment.strip() for segment in raw.split(",") if segment.strip()})
101
+
102
+
103
+ # Global settings instance
104
+ _settings: Settings | None = None
105
+
106
+ # In-process (embedded) HA connection, set only when ha-mcp runs inside Home
107
+ # Assistant core via the ha_mcp_tools custom component's in-process server entry.
108
+ # The component hands the loopback URL + a provisioned admin token to ha-mcp
109
+ # THROUGH THIS DICT — never
110
+ # via os.environ — so the admin token can't be read from the shared HA process
111
+ # environment. Applied onto the Settings singleton in ``get_global_settings``.
112
+ _EMBEDDED_CONNECTION: dict[str, str | bool] = {}
113
+
114
+
115
+ def set_embedded_connection(
116
+ url: str,
117
+ token: str,
118
+ verify_ssl: bool | None = None,
119
+ config_dir: str | None = None,
120
+ llm_api_enabled: bool | None = None,
121
+ ) -> None:
122
+ """Register the in-process HA connection for embedded mode.
123
+
124
+ Embedded-mode only: called by the ha_mcp_tools custom component's in-process
125
+ server entry inside its server worker thread, before the server is
126
+ constructed, so the loopback URL
127
+ and admin token reach ``Settings`` in memory instead of through ``os.environ``.
128
+ The values survive ``_reset_global_settings()``: the settings-UI reset+rebuild
129
+ path re-applies them on the next ``get_global_settings()`` call.
130
+
131
+ Also applies to an ALREADY-BUILT singleton: importing ``ha_mcp`` runs the
132
+ package's eager import chain, and ``tools/smart_search/_config.py`` builds
133
+ the settings singleton at import time (its documented read-once budgets).
134
+ Registration therefore cannot assume it runs before the first build — the
135
+ integration imports this function from the very package whose import
136
+ creates the singleton.
137
+
138
+ ``verify_ssl`` lets the component disable certificate verification when it
139
+ derives an ``https://127.0.0.1`` loopback URL from Home Assistant's SSL
140
+ config (issue #1890): HA's certificate is issued for its hostname, never
141
+ for 127.0.0.1, so verification on the loopback connection can only fail.
142
+ ``None`` (the default, and what pre-#1890 components pass implicitly)
143
+ leaves ``Settings.verify_ssl`` alone.
144
+
145
+ ``config_dir`` is Home Assistant's own configuration directory (#2329).
146
+ Embedded mode is its only writer and it is read back through
147
+ :func:`get_embedded_config_dir` alone — deliberately NOT a ``Settings``
148
+ field, so no env var or override file can point it anywhere. It lets an
149
+ in-process server read a blueprint's on-disk YAML directly instead of
150
+ routing the read through the component, and grants nothing an external
151
+ server could not already reach.
152
+ """
153
+ _EMBEDDED_CONNECTION["url"] = url
154
+ _EMBEDDED_CONNECTION["token"] = token
155
+ if verify_ssl is None:
156
+ _EMBEDDED_CONNECTION.pop("verify_ssl", None)
157
+ else:
158
+ _EMBEDDED_CONNECTION["verify_ssl"] = verify_ssl
159
+ if config_dir is None:
160
+ _EMBEDDED_CONNECTION.pop("config_dir", None)
161
+ else:
162
+ _EMBEDDED_CONNECTION["config_dir"] = config_dir
163
+ if llm_api_enabled is None:
164
+ _EMBEDDED_CONNECTION.pop("llm_api_enabled", None)
165
+ else:
166
+ _EMBEDDED_CONNECTION["llm_api_enabled"] = llm_api_enabled
167
+ if _settings is not None:
168
+ _apply_embedded_connection(_settings)
169
+
170
+
171
+ def get_embedded_config_dir() -> str | None:
172
+ """Home Assistant's configuration directory, when running embedded.
173
+
174
+ ``None`` outside embedded mode, and on an embedded install whose component
175
+ predates the ``config_dir`` keyword. Consumers must treat it as an optional
176
+ capability and fall back to their component / service path.
177
+ """
178
+ config_dir = _EMBEDDED_CONNECTION.get("config_dir")
179
+ return config_dir if isinstance(config_dir, str) and config_dir else None
180
+
181
+
182
+ def should_emit_llm_api_metadata() -> bool:
183
+ """Return whether ``tools/list`` needs the component's private metadata.
184
+
185
+ Standalone and add-on clients have no consumer for ``_meta.ha_mcp``. An
186
+ embedded server needs it only when the custom component exposes its LLM
187
+ API. A missing flag means an older component, so preserve the historical
188
+ embedded behavior until that component is upgraded.
189
+ """
190
+ if not _EMBEDDED_CONNECTION:
191
+ return False
192
+ enabled = _EMBEDDED_CONNECTION.get("llm_api_enabled")
193
+ return enabled if isinstance(enabled, bool) else True
194
+
195
+
196
+ def _reset_embedded_connection() -> None:
197
+ """Drop the registered embedded connection (test seam).
198
+
199
+ Sibling to :func:`_reset_global_settings`; lets suites that exercise the
200
+ in-process token channel isolate state between tests. Not used in production —
201
+ the connection is registered once per worker thread and is meant to persist.
202
+ """
203
+ _EMBEDDED_CONNECTION.clear()
204
+
205
+
206
+ def _apply_embedded_connection(settings: "Settings") -> None:
207
+ """Apply the in-process embedded HA connection (url/token/verify_ssl) if registered.
208
+
209
+ No-op outside embedded mode. Plain ``setattr`` (``validate_assignment`` is off
210
+ on ``Settings``, mirroring ``_apply_backup_overrides``), so the loopback URL
211
+ and admin token are set in memory without ever passing through ``os.environ``.
212
+ Applied last so it wins over any env/override-file connection values.
213
+ """
214
+ url = _EMBEDDED_CONNECTION.get("url")
215
+ token = _EMBEDDED_CONNECTION.get("token")
216
+ if isinstance(url, str) and url:
217
+ settings.homeassistant_url = url.rstrip("/")
218
+ if isinstance(token, str) and token:
219
+ settings.homeassistant_token = token
220
+ verify_ssl = _EMBEDDED_CONNECTION.get("verify_ssl")
221
+ if isinstance(verify_ssl, bool):
222
+ settings.verify_ssl = verify_ssl
223
+
224
+
225
+ def get_global_settings() -> Settings:
226
+ """Get global settings instance (singleton pattern).
227
+
228
+ Applies override files at first read so web-UI edits take effect
229
+ on the next ``get_global_settings()`` call after
230
+ ``_reset_global_settings()`` is called by the POST handler:
231
+
232
+ - Feature flags persisted to ``<data_dir>/feature_flags.json``
233
+ - Auto-backup settings persisted to ``<data_dir>/backup_settings.json``
234
+
235
+ In embedded mode, the in-process HA connection registered via
236
+ ``set_embedded_connection`` is applied last (so a settings-UI reset+rebuild
237
+ re-picks it up).
238
+ """
239
+ global _settings
240
+ if _settings is None:
241
+ _settings = get_settings()
242
+ _apply_feature_flag_overrides(_settings)
243
+ _apply_backup_overrides(_settings)
244
+ _apply_advanced_overrides(_settings)
245
+ _apply_embedded_connection(_settings)
246
+ return _settings
247
+
248
+
249
+ def reset_global_settings() -> None:
250
+ """Public seam to drop the cached settings singleton.
251
+
252
+ The in-process (embedded) server calls this at every start: a config-entry
253
+ reload reuses the same Python process, so without an explicit reset the
254
+ singleton built on the FIRST start would keep serving stale feature-flag /
255
+ override values forever (the add-on gets fresh settings for free from its
256
+ process restart).
257
+ """
258
+ _reset_global_settings()
259
+
260
+
261
+ def _reset_global_settings() -> None:
262
+ """Drop the cached settings singleton.
263
+
264
+ Test seam so suites that mutate env vars can force a re-read
265
+ without reaching into module-private state. Also used by the
266
+ feature-flag and auto-backup settings POST handlers to publish a
267
+ freshly edited override file value to runtime consumers
268
+ (``get_global_settings`` is the only documented read path; the
269
+ ``@with_auto_backup`` decorator reads it per tool call).
270
+ """
271
+ global _settings
272
+ _settings = None
273
+ # Drop the gate-log dedup set too — once Settings has been
274
+ # rebuilt, an operator who's re-investigating "why is my beta
275
+ # tool off?" should see the next gate fire logged. This keeps
276
+ # the dedup tight to the lifetime of one cached Settings.
277
+ _BETA_GATE_LOGGED.clear()
278
+
279
+
280
+ # Import-time validator for cross-registry invariants.
281
+ #
282
+ # Catches a class of silent runtime bugs at module load:
283
+ # - registry rows referencing fields that don't exist on ``Settings``
284
+ # (rename / removal drift)
285
+ # - registries overlapping by name (same field applied by two
286
+ # ``_apply_*_overrides`` functions with potentially divergent
287
+ # coercion policies)
288
+ # - bounds entries pointing at non-numeric fields (would silently
289
+ # no-op in the apply loop)
290
+ # - choices entries pointing at non-str fields (same)
291
+ # - ``BETA_FEATURE_FIELDS`` referencing names not in
292
+ # ``FEATURE_FLAG_FIELDS`` (master gate would write to phantom
293
+ # Settings attributes)
294
+ def _validate_registry_fields_exist(
295
+ settings_fields: set[str],
296
+ advanced_names: set[str],
297
+ flag_names: set[str],
298
+ backup_names: set[str],
299
+ ) -> None:
300
+ """Every registry row must reference a real Settings field."""
301
+ for registry_name, names in (
302
+ ("ADVANCED_SETTINGS_FIELDS", advanced_names),
303
+ ("FEATURE_FLAG_FIELDS", flag_names),
304
+ ("BACKUP_OVERRIDE_FIELDS", backup_names),
305
+ ):
306
+ missing = names - settings_fields
307
+ if missing:
308
+ raise RuntimeError(
309
+ f"{registry_name} references fields not on Settings: {sorted(missing)}"
310
+ )
311
+
312
+
313
+ def _validate_registries_disjoint(
314
+ advanced_names: set[str], flag_names: set[str], backup_names: set[str]
315
+ ) -> None:
316
+ """Registries must be name-disjoint to avoid double-apply with divergent policies."""
317
+ overlaps = {
318
+ ("advanced", "flags"): advanced_names & flag_names,
319
+ ("advanced", "backup"): advanced_names & backup_names,
320
+ ("flags", "backup"): flag_names & backup_names,
321
+ }
322
+ for (a, b), shared in overlaps.items():
323
+ if shared:
324
+ raise RuntimeError(
325
+ f"Registry overlap between {a} and {b}: {sorted(shared)}. "
326
+ "Each field must be applied by exactly one of "
327
+ "_apply_feature_flag_overrides / _apply_advanced_overrides "
328
+ "/ _apply_backup_overrides."
329
+ )
330
+
331
+
332
+ def _validate_advanced_bounds(advanced_by_name: dict[str, AdvancedField]) -> None:
333
+ """_ADVANCED_SETTINGS_BOUNDS keys must be advanced fields AND numeric."""
334
+ for name in _ADVANCED_SETTINGS_BOUNDS:
335
+ if name not in advanced_by_name:
336
+ raise RuntimeError(
337
+ f"_ADVANCED_SETTINGS_BOUNDS[{name!r}] is not in "
338
+ "ADVANCED_SETTINGS_FIELDS"
339
+ )
340
+ if advanced_by_name[name].ftype not in (int, float):
341
+ raise RuntimeError(
342
+ f"_ADVANCED_SETTINGS_BOUNDS[{name!r}] is on a non-numeric "
343
+ f"field (type={advanced_by_name[name].ftype.__name__})"
344
+ )
345
+
346
+
347
+ def _validate_advanced_choices(advanced_by_name: dict[str, AdvancedField]) -> None:
348
+ """_ADVANCED_SETTINGS_CHOICES keys must be advanced fields AND str."""
349
+ for name in _ADVANCED_SETTINGS_CHOICES:
350
+ if name not in advanced_by_name:
351
+ raise RuntimeError(
352
+ f"_ADVANCED_SETTINGS_CHOICES[{name!r}] is not in "
353
+ "ADVANCED_SETTINGS_FIELDS"
354
+ )
355
+ if advanced_by_name[name].ftype is not str:
356
+ raise RuntimeError(
357
+ f"_ADVANCED_SETTINGS_CHOICES[{name!r}] is on a non-str "
358
+ f"field (type={advanced_by_name[name].ftype.__name__})"
359
+ )
360
+
361
+
362
+ def _validate_beta_subset(flag_names: set[str]) -> None:
363
+ """BETA_FEATURE_FIELDS must be a subset of FEATURE_FLAG_FIELDS.
364
+
365
+ The master gate writes to them via setattr; phantom names would
366
+ silently land on extras with no effect on the runtime gate.
367
+ """
368
+ beta_set = set(BETA_FEATURE_FIELDS)
369
+ not_in_flags = beta_set - flag_names
370
+ if not_in_flags:
371
+ raise RuntimeError(
372
+ f"BETA_FEATURE_FIELDS contains names not in FEATURE_FLAG_FIELDS: "
373
+ f"{sorted(not_in_flags)}"
374
+ )
375
+
376
+
377
+ def _validate_registries() -> None:
378
+ settings_fields = set(Settings.model_fields.keys())
379
+
380
+ advanced_names = {f.field for f in ADVANCED_SETTINGS_FIELDS}
381
+ flag_names = {f.field for f in FEATURE_FLAG_FIELDS}
382
+ backup_names = {f.field for f in BACKUP_OVERRIDE_FIELDS}
383
+
384
+ _validate_registry_fields_exist(
385
+ settings_fields, advanced_names, flag_names, backup_names
386
+ )
387
+ _validate_registries_disjoint(advanced_names, flag_names, backup_names)
388
+
389
+ advanced_by_name = {f.field: f for f in ADVANCED_SETTINGS_FIELDS}
390
+ _validate_advanced_bounds(advanced_by_name)
391
+ _validate_advanced_choices(advanced_by_name)
392
+
393
+ _validate_beta_subset(flag_names)
394
+
395
+
396
+ _validate_registries()
@@ -0,0 +1,258 @@
1
+ """Auto-backup settings overrides read from ``backup_settings.json``."""
2
+
3
+ import logging
4
+ import os
5
+ from typing import Any
6
+
7
+ from ha_mcp._version import is_running_in_addon
8
+ from ha_mcp.config_registry import (
9
+ _BACKUP_OVERRIDE_FILENAME,
10
+ BACKUP_OVERRIDE_FIELDS,
11
+ RegistryFieldType,
12
+ )
13
+ from ha_mcp.config_settings import Settings
14
+
15
+ # All config modules log under the ``ha_mcp.config`` logger name.
16
+ logger = logging.getLogger("ha_mcp.config")
17
+
18
+
19
+ def get_backup_setting_origin(env_name: str) -> str:
20
+ """Return where the live value for ``env_name`` is sourced from.
21
+
22
+ Used by the web UI to label each auto-backup field with its source
23
+ and decide whether the field is editable from the web UI:
24
+
25
+ - ``"addon"``: running inside the HA add-on. ``start.py`` always
26
+ writes these env vars from ``config.yaml`` on every addon start;
27
+ the override file is ignored. Web UI edits are routed through
28
+ Supervisor ``/addons/self/options`` so ``config.yaml`` stays
29
+ authoritative.
30
+ - ``"env"``: env var explicitly set in the process environment
31
+ (includes values loaded from ``.env`` via ``load_dotenv`` at
32
+ module import — those land in ``os.environ`` and are
33
+ indistinguishable from ``docker -e`` / shell-set values, which is
34
+ intentional per the deployment design). Web UI shows the field
35
+ read-only; user must unset / remove the env var to edit.
36
+ - ``"file"``: standalone deployment with a value persisted in
37
+ ``<data_dir>/backup_settings.json``. Web UI edits update the
38
+ file in place.
39
+ - ``"default"``: no env var and no override file entry; the
40
+ pydantic field default applies. Web UI edits create the file.
41
+ """
42
+ # is_running_in_addon() rather than a raw SUPERVISOR_TOKEN read so the
43
+ # embedded in-process server (SUPERVISOR_TOKEN present on HAOS, but not an
44
+ # add-on) is labeled a standalone deployment and its backup settings persist
45
+ # to the override file instead of a non-existent Supervisor add-on.
46
+ if is_running_in_addon():
47
+ return "addon"
48
+ if os.environ.get(env_name) is not None:
49
+ return "env"
50
+ field_name = next(
51
+ (fname for fname, ename, _ in BACKUP_OVERRIDE_FIELDS if ename == env_name),
52
+ None,
53
+ )
54
+ if field_name is None:
55
+ return "default"
56
+ overrides = _read_backup_override_file()
57
+ if field_name in overrides:
58
+ return "file"
59
+ return "default"
60
+
61
+
62
+ def _read_backup_override_file() -> dict[str, object]:
63
+ """Return the contents of the auto-backup override file, or ``{}``.
64
+
65
+ Best-effort: a corrupt file MUST NOT break Settings loading. The
66
+ failure modes split into two categories that need different
67
+ treatment (mirrors ``_read_feature_flag_override_file``):
68
+
69
+ * **Silent**: file does not exist. The override layer is opt-in;
70
+ a missing file is the normal "user has never edited" state and
71
+ should not log.
72
+ * **Loud (WARNING)**: file exists but is unreadable
73
+ (``PermissionError``, broken filesystem) or unparseable
74
+ (``JSONDecodeError``). The user toggled something, the UI said
75
+ "Saved", and the value is silently being ignored. Without a
76
+ log line they have no diagnostic; with one, the sidecar/server
77
+ log tells them exactly what to fix.
78
+
79
+ Reads are not cached — callers (Settings construction, the GET
80
+ endpoint) hit disk each time, which is fine for a small JSON file
81
+ behind a singleton-cached Settings.
82
+ """
83
+ import json
84
+ from pathlib import Path
85
+
86
+ try:
87
+ from .utils.data_paths import get_data_dir
88
+
89
+ path: Path = get_data_dir() / _BACKUP_OVERRIDE_FILENAME
90
+ except (RuntimeError, OSError):
91
+ # Couldn't resolve the data dir at all — user has no override
92
+ # file by definition. Silent.
93
+ return {}
94
+ try:
95
+ raw = path.read_text()
96
+ except FileNotFoundError:
97
+ return {}
98
+ except OSError:
99
+ logger.warning(
100
+ "Auto-backup override file at %s exists but is unreadable; "
101
+ "falling back to defaults. Check filesystem permissions.",
102
+ path,
103
+ exc_info=True,
104
+ )
105
+ return {}
106
+ try:
107
+ data = json.loads(raw)
108
+ except ValueError:
109
+ logger.warning(
110
+ "Auto-backup override file at %s is not valid JSON; "
111
+ "falling back to defaults. Delete or fix the file to "
112
+ "re-enable persisted toggles.",
113
+ path,
114
+ )
115
+ return {}
116
+ if not isinstance(data, dict):
117
+ logger.warning(
118
+ "Auto-backup override file at %s is not a JSON object "
119
+ "(got %s); falling back to defaults.",
120
+ path,
121
+ type(data).__name__,
122
+ )
123
+ return {}
124
+ return data
125
+
126
+
127
+ def _coerce_backup_int_value(field_name: str, raw: object) -> tuple[bool, Any]:
128
+ """Coerce + per-field range-check one int-typed BACKUP_OVERRIDE_FIELDS value.
129
+
130
+ Split out of ``_coerce_backup_override_value`` (mccabe complexity):
131
+ handles the int-parse plus the three field-specific range checks.
132
+ """
133
+ if isinstance(raw, bool) or not isinstance(raw, int):
134
+ logger.warning(
135
+ "backup_settings.json: %s expects int, got %s; ignoring",
136
+ field_name,
137
+ type(raw).__name__,
138
+ )
139
+ return False, None
140
+ coerced = int(raw)
141
+ if field_name == "auto_backup_throttle_minutes" and not 0 <= coerced <= 1440:
142
+ logger.warning(
143
+ "backup_settings.json: auto_backup_throttle_minutes=%d out of "
144
+ "range 0..1440; ignoring",
145
+ coerced,
146
+ )
147
+ return False, None
148
+ if field_name == "auto_backup_retain_per_entity" and not 1 <= coerced <= 10_000:
149
+ logger.warning(
150
+ "backup_settings.json: auto_backup_retain_per_entity=%d out of "
151
+ "range 1..10000; ignoring",
152
+ coerced,
153
+ )
154
+ return False, None
155
+ if field_name == "auto_backup_calendar_lookahead_days" and not 1 <= coerced <= 365:
156
+ logger.warning(
157
+ "backup_settings.json: auto_backup_calendar_lookahead_days=%d out of "
158
+ "range 1..365; ignoring",
159
+ coerced,
160
+ )
161
+ return False, None
162
+ if field_name == "snapshot_delete_min_age_days" and not 0 <= coerced <= 365:
163
+ logger.warning(
164
+ "backup_settings.json: snapshot_delete_min_age_days=%d out of "
165
+ "range 0..365; ignoring",
166
+ coerced,
167
+ )
168
+ return False, None
169
+ return True, coerced
170
+
171
+
172
+ def _coerce_backup_override_value(
173
+ field_name: str, ftype: RegistryFieldType, raw: object
174
+ ) -> tuple[bool, Any]:
175
+ """Coerce + range-check one override-file value for BACKUP_OVERRIDE_FIELDS.
176
+
177
+ Returns ``(ok, coerced)``. ``ok=False`` means the value was rejected
178
+ (a warning has already been logged) and the caller should skip
179
+ applying it.
180
+ """
181
+ if ftype is bool:
182
+ if not isinstance(raw, bool | int):
183
+ logger.warning(
184
+ "backup_settings.json: %s expects bool, got %s; ignoring",
185
+ field_name,
186
+ type(raw).__name__,
187
+ )
188
+ return False, None
189
+ return True, bool(raw)
190
+ elif ftype is int:
191
+ return _coerce_backup_int_value(field_name, raw)
192
+ elif ftype is str:
193
+ if not isinstance(raw, str):
194
+ logger.warning(
195
+ "backup_settings.json: %s expects str, got %s; ignoring",
196
+ field_name,
197
+ type(raw).__name__,
198
+ )
199
+ return False, None
200
+ if "\x00" in raw:
201
+ logger.warning(
202
+ "backup_settings.json: %s contains null byte; ignoring",
203
+ field_name,
204
+ )
205
+ return False, None
206
+ return True, raw
207
+ return False, None
208
+
209
+
210
+ def _apply_one_backup_override(
211
+ settings: "Settings",
212
+ field_name: str,
213
+ env_name: str,
214
+ ftype: RegistryFieldType,
215
+ overrides: dict[str, object],
216
+ ) -> None:
217
+ """Apply a single BACKUP_OVERRIDE_FIELDS override-file entry, if eligible."""
218
+ if os.environ.get(env_name) is not None:
219
+ return
220
+ if field_name not in overrides:
221
+ return
222
+ ok, coerced = _coerce_backup_override_value(
223
+ field_name, ftype, overrides[field_name]
224
+ )
225
+ if not ok:
226
+ return
227
+ try:
228
+ setattr(settings, field_name, coerced)
229
+ except (ValueError, TypeError) as err:
230
+ logger.warning(
231
+ "backup_settings.json: setattr(%s, %r) rejected by Settings (%s); ignoring",
232
+ field_name,
233
+ coerced,
234
+ err,
235
+ )
236
+
237
+
238
+ def _apply_backup_overrides(settings: "Settings") -> None:
239
+ """Patch ``settings`` with values from the override file, in place.
240
+
241
+ Honors the "env var wins" contract: a field whose env var is set in
242
+ the process environment is never overwritten. Addon mode short-
243
+ circuits — ``start.py`` already wrote these env vars from
244
+ ``config.yaml`` and the override file is ignored in that mode.
245
+ Range / type clamping mirrors the pydantic Field bounds so a
246
+ corrupt override file can't push values out of range; out-of-range
247
+ or untypable entries are silently skipped.
248
+ """
249
+ # is_running_in_addon() (embedded-aware) so the in-process server applies
250
+ # its backup override file like a standalone deployment; see the matching
251
+ # rationale in _apply_feature_flag_overrides / get_backup_setting_origin.
252
+ if is_running_in_addon():
253
+ return
254
+ overrides = _read_backup_override_file()
255
+ if not overrides:
256
+ return
257
+ for field_name, env_name, ftype in BACKUP_OVERRIDE_FIELDS:
258
+ _apply_one_backup_override(settings, field_name, env_name, ftype, overrides)