ha-mcp-dev 9.0.1.dev3235__tar.gz → 9.1.0.dev3236__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 (819) hide show
  1. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/PKG-INFO +1 -1
  2. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/pyproject.toml +1 -1
  3. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/pyproject.toml.orig +1 -1
  4. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/config_settings.py +8 -8
  5. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/dashboard_screenshot/__init__.py +2 -3
  6. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/dashboard_screenshot/capture.py +39 -30
  7. ha_mcp_dev-9.1.0.dev3236/src/ha_mcp/dashboard_screenshot/engine_compat.py +17 -0
  8. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/dashboard_screenshot/paths.py +2 -2
  9. ha_mcp_dev-9.1.0.dev3236/src/ha_mcp/dashboard_screenshot/provision.py +387 -0
  10. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/settings_ui/locales/en.json +1 -1
  11. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/settings_ui/settings_js/05_feature_flags.js +1 -1
  12. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/tools_dashboard_screenshot.py +13 -11
  13. ha_mcp_dev-9.0.1.dev3235/src/ha_mcp/dashboard_screenshot/provision.py +0 -306
  14. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/LICENSE +0 -0
  15. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/README.md +0 -0
  16. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/__init__.py +0 -0
  17. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/__main__.py +0 -0
  18. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_pypi_marker +0 -0
  19. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_rich_compat.py +0 -0
  20. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/__init__.py +0 -0
  21. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
  22. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
  23. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
  24. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
  25. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
  26. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
  27. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
  28. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
  29. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
  30. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
  31. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
  32. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
  33. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
  34. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
  35. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
  36. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
  37. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
  38. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
  39. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
  40. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev_security.py +0 -0
  41. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
  42. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
  43. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
  44. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
  45. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
  46. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
  47. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
  48. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
  49. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
  50. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
  51. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
  52. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
  53. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
  54. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
  55. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
  56. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
  57. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
  58. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
  59. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
  60. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
  61. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
  62. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
  63. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
  64. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
  65. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
  66. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
  67. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
  68. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
  69. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
  70. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
  71. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
  72. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
  73. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
  74. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
  75. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
  76. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
  77. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
  78. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
  79. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
  80. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
  81. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
  82. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/client/mixins/skills.py +0 -0
  83. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
  84. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
  85. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
  86. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
  87. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
  88. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
  89. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
  90. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
  91. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
  92. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
  93. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
  94. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
  95. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
  96. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
  97. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
  98. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
  99. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
  100. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
  101. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
  102. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
  103. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
  104. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
  105. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
  106. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
  107. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
  108. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
  109. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
  110. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
  111. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
  112. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
  113. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
  114. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
  115. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
  116. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
  117. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
  118. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
  119. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
  120. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/jev_search.py +0 -0
  121. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
  122. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
  123. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
  124. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
  125. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
  126. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
  127. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
  128. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
  129. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
  130. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
  131. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
  132. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
  133. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
  134. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
  135. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
  136. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
  137. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
  138. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
  139. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
  140. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
  141. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
  142. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
  143. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
  144. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
  145. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
  146. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
  147. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
  148. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
  149. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
  150. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
  151. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
  152. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
  153. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
  154. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
  155. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
  156. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
  157. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
  158. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
  159. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
  160. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
  161. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
  162. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
  163. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
  164. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
  165. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
  166. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
  167. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
  168. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
  169. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
  170. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
  171. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
  172. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
  173. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
  174. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
  175. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
  176. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
  177. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
  178. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
  179. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
  180. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
  181. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
  182. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
  183. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
  184. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
  185. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
  186. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
  187. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
  188. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
  189. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
  190. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
  191. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
  192. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
  193. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/mixins/extensions.py +0 -0
  194. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
  195. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
  196. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
  197. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
  198. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
  199. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
  200. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
  201. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
  202. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
  203. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
  204. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
  205. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
  206. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
  207. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
  208. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
  209. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
  210. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
  211. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
  212. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
  213. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
  214. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
  215. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
  216. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
  217. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
  218. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
  219. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
  220. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
  221. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
  222. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
  223. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
  224. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
  225. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
  226. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
  227. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
  228. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
  229. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
  230. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
  231. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
  232. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
  233. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
  234. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
  235. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
  236. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
  237. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
  238. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
  239. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
  240. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
  241. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
  242. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/skills/__init__.py +0 -0
  243. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/skills/_constants.py +0 -0
  244. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/skills/_resources.py +0 -0
  245. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/skills/_snapshot.py +0 -0
  246. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/skills/_source.py +0 -0
  247. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/skills/client.py +0 -0
  248. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/skills/extension.py +0 -0
  249. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/skills/models.py +0 -0
  250. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
  251. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
  252. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
  253. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
  254. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
  255. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
  256. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
  257. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
  258. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
  259. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
  260. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
  261. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
  262. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
  263. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
  264. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
  265. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
  266. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
  267. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
  268. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
  269. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
  270. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
  271. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
  272. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
  273. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
  274. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
  275. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
  276. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
  277. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
  278. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
  279. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
  280. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
  281. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
  282. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
  283. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
  284. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
  285. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
  286. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
  287. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
  288. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
  289. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
  290. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
  291. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
  292. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
  293. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
  294. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
  295. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
  296. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
  297. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
  298. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
  299. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
  300. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
  301. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
  302. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
  303. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
  304. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
  305. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
  306. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
  307. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
  308. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
  309. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
  310. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
  311. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
  312. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
  313. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
  314. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
  315. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
  316. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
  317. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
  318. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
  319. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
  320. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
  321. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
  322. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
  323. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
  324. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
  325. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
  326. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
  327. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
  328. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
  329. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
  330. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
  331. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
  332. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
  333. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
  334. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
  335. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
  336. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
  337. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
  338. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
  339. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
  340. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
  341. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
  342. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
  343. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
  344. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
  345. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
  346. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
  347. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
  348. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
  349. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
  350. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
  351. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
  352. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
  353. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
  354. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
  355. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
  356. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
  357. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
  358. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
  359. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
  360. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
  361. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
  362. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
  363. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
  364. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
  365. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
  366. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
  367. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
  368. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
  369. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
  370. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
  371. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
  372. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
  373. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
  374. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
  375. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
  376. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
  377. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
  378. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
  379. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
  380. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
  381. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
  382. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
  383. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
  384. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
  385. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
  386. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
  387. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
  388. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
  389. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
  390. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
  391. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
  392. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
  393. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
  394. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
  395. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
  396. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
  397. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
  398. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
  399. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
  400. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
  401. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
  402. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
  403. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
  404. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
  405. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
  406. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
  407. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/shared/_request_clock.py +0 -0
  408. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
  409. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
  410. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
  411. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
  412. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
  413. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
  414. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
  415. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
  416. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
  417. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
  418. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
  419. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
  420. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
  421. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
  422. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
  423. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
  424. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
  425. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
  426. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
  427. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
  428. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
  429. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
  430. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
  431. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
  432. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
  433. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
  434. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
  435. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
  436. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
  437. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
  438. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
  439. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
  440. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
  441. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
  442. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
  443. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
  444. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/requirements.txt +0 -0
  445. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
  446. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
  447. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
  448. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
  449. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
  450. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
  451. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
  452. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
  453. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
  454. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
  455. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
  456. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
  457. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
  458. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/client.py +0 -0
  459. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
  460. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
  461. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
  462. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
  463. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
  464. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
  465. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
  466. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
  467. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
  468. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
  469. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
  470. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
  471. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
  472. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
  473. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
  474. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
  475. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
  476. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
  477. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
  478. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
  479. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
  480. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
  481. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/server.py +0 -0
  482. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
  483. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
  484. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
  485. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
  486. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
  487. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
  488. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
  489. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
  490. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
  491. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
  492. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
  493. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
  494. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
  495. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
  496. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
  497. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
  498. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
  499. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
  500. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_vendor/websockets/version.py +0 -0
  501. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/_version.py +0 -0
  502. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/app_discovery.py +0 -0
  503. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/auth/__init__.py +0 -0
  504. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/auth/consent_form.py +0 -0
  505. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/auth/iss_stamp.py +0 -0
  506. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/auth/oidc_compat.py +0 -0
  507. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/auth/provider.py +0 -0
  508. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/backup_dashboards.py +0 -0
  509. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/backup_diff.py +0 -0
  510. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/backup_entities.py +0 -0
  511. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/backup_entity_ids.py +0 -0
  512. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/backup_helper_target.py +0 -0
  513. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/backup_integrations.py +0 -0
  514. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/backup_manager.py +0 -0
  515. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/backup_tags.py +0 -0
  516. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/backup_zones.py +0 -0
  517. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/browser_landing.py +0 -0
  518. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/client/__init__.py +0 -0
  519. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/client/admin_routes.py +0 -0
  520. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/client/error_log_journald.py +0 -0
  521. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/client/models.py +0 -0
  522. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/client/rest_client.py +0 -0
  523. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/client/supervisor_client.py +0 -0
  524. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/client/websocket_client.py +0 -0
  525. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/client/websocket_listener.py +0 -0
  526. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/config.py +0 -0
  527. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/config_backup.py +0 -0
  528. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/config_meta.py +0 -0
  529. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/config_overrides.py +0 -0
  530. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/config_registry.py +0 -0
  531. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
  532. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
  533. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/errors.py +0 -0
  534. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/ha_request_queue.py +0 -0
  535. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/hacs_auto_refresh.py +0 -0
  536. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/http_transport.py +0 -0
  537. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/image_info.py +0 -0
  538. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/llm_exposure.py +0 -0
  539. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/log_filters.py +0 -0
  540. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/mcp_client_context.py +0 -0
  541. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/policy/__init__.py +0 -0
  542. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/policy/approval_queue.py +0 -0
  543. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/policy/decision_pin.py +0 -0
  544. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/policy/decisions.py +0 -0
  545. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/policy/editing.py +0 -0
  546. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/policy/evaluator.py +0 -0
  547. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/policy/events.py +0 -0
  548. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/policy/handlers.py +0 -0
  549. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/policy/middleware.py +0 -0
  550. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/policy/model.py +0 -0
  551. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/policy/mrtr.py +0 -0
  552. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/policy/persistence.py +0 -0
  553. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/policy/server_channels.py +0 -0
  554. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/policy/value_sources.py +0 -0
  555. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/py.typed +0 -0
  556. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/read_only.py +0 -0
  557. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/redaction.py +0 -0
  558. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/renamed_tools.py +0 -0
  559. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  560. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  561. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
  562. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-actions.md +0 -0
  563. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
  564. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
  565. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  566. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  567. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  568. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  569. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  570. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  571. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  572. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
  573. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  574. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/triggers-and-conditions.md +0 -0
  575. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
  576. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/server.py +0 -0
  577. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/server_instructions.py +0 -0
  578. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/server_lifespan.py +0 -0
  579. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/server_tool_text.py +0 -0
  580. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/settings_ui/__init__.py +0 -0
  581. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
  582. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
  583. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
  584. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/settings_ui/_handlers_oauth_callbacks.py +0 -0
  585. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
  586. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
  587. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
  588. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/settings_ui/_i18n.py +0 -0
  589. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
  590. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/settings_ui/_persistence.py +0 -0
  591. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
  592. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/settings_ui/_theme.py +0 -0
  593. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
  594. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/settings_ui/locales/README.md +0 -0
  595. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/settings_ui/locales/az.json +0 -0
  596. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
  597. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/settings_ui/locales/de.json +0 -0
  598. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
  599. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/settings_ui/locales/es.json +0 -0
  600. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
  601. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/settings_ui/locales/it.json +0 -0
  602. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
  603. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
  604. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
  605. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
  606. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
  607. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
  608. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
  609. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
  610. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/settings_ui/settings.css +0 -0
  611. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/settings_ui/settings.html +0 -0
  612. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/settings_ui/settings_js/01_i18n_state.js +0 -0
  613. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/settings_ui/settings_js/02_tools_restart.js +0 -0
  614. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/settings_ui/settings_js/03_render_save.js +0 -0
  615. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/settings_ui/settings_js/04_backups.js +0 -0
  616. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/settings_ui/settings_js/06_policy_cards.js +0 -0
  617. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/settings_ui/settings_js/07_policy_actions.js +0 -0
  618. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/settings_ui/settings_js/08_advanced.js +0 -0
  619. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/settings_ui/settings_js/09_prefs_visibility.js +0 -0
  620. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/settings_ui/settings_js/10_oauth_callbacks.js +0 -0
  621. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/smoke_test.py +0 -0
  622. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  623. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/storage_helper_types.py +0 -0
  624. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/strict_bps.py +0 -0
  625. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tool_dispatch.py +0 -0
  626. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/__init__.py +0 -0
  627. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/addon_connection_hints.py +0 -0
  628. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/area_messages.py +0 -0
  629. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/auto_backup.py +0 -0
  630. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/backup.py +0 -0
  631. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/backup_access.py +0 -0
  632. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/backup_on_demand.py +0 -0
  633. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/backup_snapshot.py +0 -0
  634. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/backup_snapshot_restore.py +0 -0
  635. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  636. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/best_practice_result.py +0 -0
  637. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/best_practice_variables.py +0 -0
  638. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/blueprint_sources.py +0 -0
  639. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
  640. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/blueprint_write.py +0 -0
  641. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/bug_report_config.py +0 -0
  642. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/bug_report_templates.py +0 -0
  643. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/bulk_selector.py +0 -0
  644. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/coercion.py +0 -0
  645. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/component_api.py +0 -0
  646. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/component_config_entries.py +0 -0
  647. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/component_config_reads.py +0 -0
  648. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
  649. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/component_devices.py +0 -0
  650. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/component_helper_collections.py +0 -0
  651. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/component_registries.py +0 -0
  652. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
  653. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/config_entry_backup.py +0 -0
  654. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/config_entry_flow.py +0 -0
  655. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
  656. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/config_entry_flow_introspect.py +0 -0
  657. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
  658. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
  659. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/config_entry_identity.py +0 -0
  660. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
  661. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
  662. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/config_file_visibility.py +0 -0
  663. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/config_helpers/__init__.py +0 -0
  664. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/config_helpers/core_payload.py +0 -0
  665. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/config_helpers/create.py +0 -0
  666. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/config_helpers/describe.py +0 -0
  667. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/config_helpers/flow.py +0 -0
  668. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/config_helpers/icon_route.py +0 -0
  669. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/config_helpers/listing.py +0 -0
  670. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/config_helpers/registry.py +0 -0
  671. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/config_helpers/schemas.py +0 -0
  672. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/config_helpers/typed_config.py +0 -0
  673. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/config_helpers/update.py +0 -0
  674. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/config_helpers/validation.py +0 -0
  675. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/config_subentry_restore.py +0 -0
  676. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/config_write_errors.py +0 -0
  677. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/config_write_helpers.py +0 -0
  678. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/core_contract.py +0 -0
  679. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/dashboard_card_describe.py +0 -0
  680. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
  681. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/dashboard_list_checks.py +0 -0
  682. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/dashboard_read_errors.py +0 -0
  683. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/dev_backup.py +0 -0
  684. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/device_control.py +0 -0
  685. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/device_enrichment.py +0 -0
  686. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/diagnostics_helpers.py +0 -0
  687. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/energy_preferences.py +0 -0
  688. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/entity_param_parsing.py +0 -0
  689. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/entity_registration.py +0 -0
  690. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/entity_removal.py +0 -0
  691. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/entity_update_fields.py +0 -0
  692. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/error_log_parsing.py +0 -0
  693. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/flow_helper_lookup.py +0 -0
  694. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/hacs_registration.py +0 -0
  695. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/helper_flows.py +0 -0
  696. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/helpers.py +0 -0
  697. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/history_response.py +0 -0
  698. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/integration_entry_state.py +0 -0
  699. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
  700. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/log_common.py +0 -0
  701. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/log_sources.py +0 -0
  702. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/log_sources_fault.py +0 -0
  703. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/log_sources_logbook.py +0 -0
  704. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
  705. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/radio/__init__.py +0 -0
  706. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/radio/base.py +0 -0
  707. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/radio/matter.py +0 -0
  708. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/radio/thread.py +0 -0
  709. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/radio/zigbee.py +0 -0
  710. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/radio/zwave.py +0 -0
  711. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/radio/zwave_parameters.py +0 -0
  712. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/recorder_errors.py +0 -0
  713. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/reference_validator.py +0 -0
  714. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/registry.py +0 -0
  715. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
  716. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/response_helpers.py +0 -0
  717. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/scene_discovery.py +0 -0
  718. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/search/__init__.py +0 -0
  719. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/search/base.py +0 -0
  720. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/search/component.py +0 -0
  721. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/search/entities.py +0 -0
  722. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/search/legacy.py +0 -0
  723. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/search/modes.py +0 -0
  724. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/search/overview.py +0 -0
  725. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/search/response.py +0 -0
  726. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/search/state.py +0 -0
  727. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/server_version.py +0 -0
  728. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  729. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  730. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  731. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
  732. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  733. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  734. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
  735. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  736. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  737. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  738. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/statistics_calendar.py +0 -0
  739. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/statistics_helpers.py +0 -0
  740. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/statistics_resets.py +0 -0
  741. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/system_restart.py +0 -0
  742. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/tool_hints.py +0 -0
  743. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
  744. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/tools_addons.py +0 -0
  745. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/tools_areas.py +0 -0
  746. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
  747. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  748. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  749. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/tools_calendar.py +0 -0
  750. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/tools_camera.py +0 -0
  751. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/tools_categories.py +0 -0
  752. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/tools_code.py +0 -0
  753. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/tools_config_automations.py +0 -0
  754. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
  755. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  756. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
  757. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
  758. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/tools_dev.py +0 -0
  759. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/tools_energy.py +0 -0
  760. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/tools_entities.py +0 -0
  761. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  762. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/tools_groups.py +0 -0
  763. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/tools_hacs.py +0 -0
  764. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/tools_history.py +0 -0
  765. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/tools_integrations.py +0 -0
  766. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/tools_labels.py +0 -0
  767. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/tools_logs.py +0 -0
  768. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/tools_radio.py +0 -0
  769. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/tools_registry.py +0 -0
  770. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/tools_resources.py +0 -0
  771. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/tools_search.py +0 -0
  772. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/tools_security_policy.py +0 -0
  773. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/tools_service.py +0 -0
  774. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/tools_services.py +0 -0
  775. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/tools_system.py +0 -0
  776. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/tools_themes.py +0 -0
  777. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/tools_todo.py +0 -0
  778. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/tools_traces.py +0 -0
  779. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/tools_updates.py +0 -0
  780. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/tools_utility.py +0 -0
  781. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  782. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  783. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
  784. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/tools_zones.py +0 -0
  785. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/util_helpers.py +0 -0
  786. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/validation_middleware.py +0 -0
  787. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/tools/ws_waiters.py +0 -0
  788. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/transforms/__init__.py +0 -0
  789. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/transforms/categorized_search.py +0 -0
  790. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/transforms/compact_params.py +0 -0
  791. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/transforms/component_helpers.py +0 -0
  792. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/transforms/component_search.py +0 -0
  793. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  794. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/transforms/write_tool_note.py +0 -0
  795. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/transport_security.py +0 -0
  796. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/update_check.py +0 -0
  797. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/utils/__init__.py +0 -0
  798. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/utils/config_hash.py +0 -0
  799. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/utils/config_write_lock.py +0 -0
  800. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/utils/dashboard_patch.py +0 -0
  801. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/utils/data_paths.py +0 -0
  802. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
  803. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/utils/domain_handlers.py +0 -0
  804. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/utils/entity_membership.py +0 -0
  805. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  806. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  807. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/utils/mcp_client_host.py +0 -0
  808. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/utils/operation_manager.py +0 -0
  809. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/utils/python_sandbox.py +0 -0
  810. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/utils/registry_update_lock.py +0 -0
  811. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/utils/skill_loader.py +0 -0
  812. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/utils/usage_logger.py +0 -0
  813. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/visibility/__init__.py +0 -0
  814. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/visibility/config_files.py +0 -0
  815. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/visibility/enforcement.py +0 -0
  816. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/visibility/identifier_aliases.py +0 -0
  817. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/visibility/model.py +0 -0
  818. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/visibility/persistence.py +0 -0
  819. {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3236}/src/ha_mcp/visibility/resolver.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ha-mcp-dev
3
- Version: 9.0.1.dev3235
3
+ Version: 9.1.0.dev3236
4
4
  Summary: Home Assistant MCP Server - Complete control of Home Assistant through MCP
5
5
  Keywords: mcp,home-assistant,ai,automation,smart-home
6
6
  Author: Julien
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "9.0.1.dev3235"
7
+ version = "9.1.0.dev3236"
8
8
  description = "Home Assistant MCP Server - Complete control of Home Assistant through MCP"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13,<3.15"
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "9.0.1.dev3235"
7
+ version = "9.1.0.dev3236"
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
@@ -250,11 +250,11 @@ class Settings(BaseSettings):
250
250
  Setting(surface="advanced", section="operations", restart_required=True),
251
251
  ] = Field(True, alias="ENABLE_WEBSOCKET")
252
252
 
253
- # Base URL of the screenshot engine (e.g. ``http://puppet:10000`` or a
254
- # docker-compose sidecar). A connection string, NOT a beta toggle, so
255
- # it is not a feature flag. Left blank, the
256
- # provisioner auto-discovers the Puppet add-on via the Supervisor in
257
- # HA OS / Supervised mode; Container / Core users set it explicitly.
253
+ # Base URL of the screenshot engine (e.g. ``http://puppet:10000``,
254
+ # ``http://wpe-screenshot-engine:8080`` or a docker-compose sidecar). A
255
+ # connection string, NOT a beta toggle, so it is not a feature flag. Left
256
+ # blank, the provisioner auto-discovers supported apps via the Supervisor
257
+ # in HA OS / Supervised mode; Container / Core users set it explicitly.
258
258
  # Resolved live per capture (resolve_engine), so unlike the time
259
259
  # budgets it takes effect without a restart (#1538).
260
260
  dashboard_screenshot_engine_url: Annotated[
@@ -670,9 +670,9 @@ class Settings(BaseSettings):
670
670
  # Dashboard screenshot mode — the ``ha_get_dashboard_screenshot`` tool
671
671
  # plus the ``include_screenshot`` / ``return_screenshot`` params on the
672
672
  # dashboard get/set tools. Renders responsive Lovelace images via a
673
- # separate, opt-in headless-Chromium screenshot add-on (balloob's Puppet
674
- # add-on, or a docker-compose sidecar). Off by default; nothing heavy is
675
- # pulled unless the user enables it AND installs the engine.
673
+ # separate, opt-in screenshot engine app (Puppet, WPE Screenshot Engine,
674
+ # or a docker-compose sidecar). Off by default; nothing heavy is pulled
675
+ # unless the user enables it AND installs the engine.
676
676
  enable_dashboard_screenshot: Annotated[
677
677
  bool, Setting(surface="feature", beta=True, app=_DEV_FLAVOR)
678
678
  ] = Field(False, alias="HAMCP_ENABLE_DASHBOARD_SCREENSHOT")
@@ -1,8 +1,7 @@
1
1
  """Dashboard screenshot support (opt-in, beta).
2
2
 
3
- Renders Home Assistant Lovelace dashboard views via a separate,
4
- single-purpose headless-Chromium screenshot engine (balloob's Puppet add-on,
5
- or a docker-compose sidecar).
3
+ Renders Home Assistant Lovelace dashboard views via a separate screenshot
4
+ engine (balloob's Puppet app, WPE Screenshot Engine, or a sidecar).
6
5
 
7
6
  The heavy browser runtime lives entirely in that separate engine — this
8
7
  package is a thin async HTTP client plus deployment-mode discovery, so the
@@ -1,8 +1,8 @@
1
1
  """Thin async HTTP client to the dashboard screenshot engine.
2
2
 
3
- The engine (balloob's Puppet add-on, or a docker-compose sidecar)
4
- authenticates to Home Assistant with its OWN configured long-lived token, so
5
- this client passes only the dashboard path + render parameters to the engine
3
+ The engine (Puppet, WPE Screenshot Engine, or a sidecar)
4
+ authenticates to Home Assistant with its own configured long-lived token, so
5
+ this client passes only the dashboard path and render parameters to the engine
6
6
  — no HA token is ever sent to the engine or exposed to the LLM. The
7
7
  :mod:`theme_guard` bracket around each capture batch may hold the engine's
8
8
  token in server memory to restore the engine user's saved theme (issue
@@ -24,7 +24,8 @@ from ha_mcp._vendor.fastmcp.exceptions import ToolError
24
24
 
25
25
  from ..errors import ErrorCode, create_error_response
26
26
  from ..tools.helpers import raise_tool_error
27
- from .provision import TOKEN_HINT, resolve_engine
27
+ from .engine_compat import is_legacy_puppet
28
+ from .provision import TOKEN_HINT, EngineKind, resolve_engine
28
29
  from .theme_guard import ThemeGuard
29
30
 
30
31
  logger = logging.getLogger(__name__)
@@ -97,9 +98,9 @@ _FORBIDDEN_PATH_BITS = ("://", "//", "..", "@", "\\", "?", "#")
97
98
  class DashboardImageCapture:
98
99
  """Image bytes plus metadata describing the render request.
99
100
 
100
- Puppet returns only an image and its content type. Viewport and frontend
101
- context values here therefore describe what ha-mcp requested, not values
102
- independently confirmed by the rendered Home Assistant frontend.
101
+ Screenshot engines return only an image and its content type. Viewport and
102
+ frontend context values here therefore describe what ha-mcp requested, not
103
+ values independently confirmed by the rendered Home Assistant frontend.
103
104
  """
104
105
 
105
106
  data: bytes
@@ -536,7 +537,7 @@ async def _read_image_response(
536
537
  "received_content_type": response_mime_type or None,
537
538
  },
538
539
  suggestions=[
539
- "Verify the URL points to the Puppet screenshot engine",
540
+ "Verify the URL points to a supported screenshot engine",
540
541
  "Check that the screenshot engine supports the "
541
542
  + f"requested {image_format} format",
542
543
  ],
@@ -601,7 +602,7 @@ async def _read_image_response(
601
602
  "received_signature_hex": image_data[:12].hex(),
602
603
  },
603
604
  suggestions=[
604
- "Verify the URL points to the Puppet screenshot engine",
605
+ "Verify the URL points to a supported screenshot engine",
605
606
  "Check whether an authentication or proxy page was returned "
606
607
  + "with an incorrect image Content-Type",
607
608
  ],
@@ -615,7 +616,9 @@ async def _request_viewport_image(
615
616
  *,
616
617
  url: str,
617
618
  path: str,
618
- engine: str,
619
+ engine_url: str,
620
+ engine_kind: EngineKind | None,
621
+ engine_version: str | None,
619
622
  params: dict[str, str],
620
623
  options: _CaptureOptions,
621
624
  viewport: _ViewportRequest,
@@ -641,13 +644,13 @@ async def _request_viewport_image(
641
644
  and viewport.height == "auto"
642
645
  and not fallback_used
643
646
  ):
644
- # Puppet <2.5.0 does not understand WIDTHxauto.
645
- fallback_used = True
646
- capture_height = MAX_VIEWPORT_DIMENSION
647
- params["viewport"] = (
648
- f"{viewport.width}x{MAX_VIEWPORT_DIMENSION}"
649
- )
650
- continue
647
+ if is_legacy_puppet(engine_kind, engine_version):
648
+ fallback_used = True
649
+ capture_height = MAX_VIEWPORT_DIMENSION
650
+ params["viewport"] = (
651
+ f"{viewport.width}x{MAX_VIEWPORT_DIMENSION}"
652
+ )
653
+ continue
651
654
  raise_tool_error(
652
655
  create_error_response(
653
656
  ErrorCode.SERVICE_CALL_FAILED,
@@ -657,6 +660,8 @@ async def _request_viewport_image(
657
660
  context={
658
661
  **request_context,
659
662
  "status_code": response.status_code,
663
+ "engine_kind": engine_kind or "unknown",
664
+ "engine_version": engine_version,
660
665
  "legacy_full_page_fallback_attempted": fallback_used,
661
666
  },
662
667
  suggestions=[
@@ -684,7 +689,7 @@ async def _request_viewport_image(
684
689
  details=str(exc),
685
690
  context={
686
691
  **request_context,
687
- "engine_url": engine,
692
+ "engine_url": engine_url,
688
693
  "render_timeout_seconds": options.render_timeout_seconds,
689
694
  },
690
695
  suggestions=[
@@ -698,16 +703,14 @@ async def _request_viewport_image(
698
703
  raise_tool_error(
699
704
  create_error_response(
700
705
  ErrorCode.CONNECTION_FAILED,
701
- f"Could not reach the dashboard screenshot engine at {engine}.",
706
+ f"Could not reach the dashboard screenshot engine at {engine_url}.",
702
707
  details=str(exc),
703
- context={**request_context, "engine_url": engine},
708
+ context={**request_context, "engine_url": engine_url},
704
709
  suggestions=[
705
- "Ensure the Puppet screenshot add-on (or sidecar) "
706
- + "is installed and running",
710
+ "Ensure the screenshot engine app or sidecar is installed and running",
707
711
  "If it is running, its access token is likely "
708
712
  + f"missing or invalid — {TOKEN_HINT}",
709
- "Check HAMCP_DASHBOARD_SCREENSHOT_ENGINE_URL on "
710
- + "Docker/Container deployments",
713
+ "Check HAMCP_DASHBOARD_SCREENSHOT_ENGINE_URL for Docker/Container deployments",
711
714
  ],
712
715
  )
713
716
  )
@@ -719,7 +722,9 @@ async def _request_or_collect_failure(
719
722
  *,
720
723
  url: str,
721
724
  path: str,
722
- engine: str,
725
+ engine_url: str,
726
+ engine_kind: EngineKind | None,
727
+ engine_version: str | None,
723
728
  params: dict[str, str],
724
729
  options: _CaptureOptions,
725
730
  viewport: _ViewportRequest,
@@ -735,7 +740,9 @@ async def _request_or_collect_failure(
735
740
  http_client,
736
741
  url=url,
737
742
  path=path,
738
- engine=engine,
743
+ engine_url=engine_url,
744
+ engine_kind=engine_kind,
745
+ engine_version=engine_version,
739
746
  params=params,
740
747
  options=options,
741
748
  viewport=viewport,
@@ -775,7 +782,7 @@ def _viewport_params(
775
782
  if options.theme is not None:
776
783
  params["theme"] = options.theme
777
784
  if options.dark_mode:
778
- # Puppet checks only for query-key presence.
785
+ # Both supported engines interpret an empty `dark` value as true.
779
786
  params["dark"] = ""
780
787
  if options.language is not None:
781
788
  params["lang"] = options.language
@@ -881,8 +888,8 @@ async def capture_dashboard_images(
881
888
  viewports = _capture_viewports(options)
882
889
 
883
890
  engine_target = await resolve_engine()
884
- engine = engine_target.url
885
- url = f"{engine}/{path}"
891
+ engine_url = engine_target.url
892
+ url = f"{engine_url}/{path}"
886
893
  mime_type = _MIME_TYPES[options.image_format]
887
894
  captures: list[DashboardImageCapture] = []
888
895
 
@@ -935,7 +942,9 @@ async def capture_dashboard_images(
935
942
  http_client,
936
943
  url=url,
937
944
  path=path,
938
- engine=engine,
945
+ engine_url=engine_url,
946
+ engine_kind=engine_target.engine_kind,
947
+ engine_version=engine_target.engine_version,
939
948
  params=params,
940
949
  options=options,
941
950
  viewport=viewport,
@@ -0,0 +1,17 @@
1
+ """Compatibility checks for screenshot-engine API differences."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from packaging.version import InvalidVersion, Version
6
+
7
+ from .provision import EngineKind
8
+
9
+
10
+ def is_legacy_puppet(engine_kind: EngineKind | None, version: str | None) -> bool:
11
+ """Return whether a verified Puppet version predates WIDTHxauto support."""
12
+ if engine_kind != "puppet" or not version:
13
+ return False
14
+ try:
15
+ return Version(version) < Version("2.5.0")
16
+ except InvalidVersion:
17
+ return False
@@ -442,7 +442,7 @@ def resolve_dashboard_view(
442
442
  elif has_static_views:
443
443
  warning = (
444
444
  "No view_path was supplied; the dashboard base route renders "
445
- "the first view visible to Puppet's Home Assistant user."
445
+ "the first view visible to the screenshot engine's Home Assistant user."
446
446
  )
447
447
  else:
448
448
  warning = (
@@ -672,7 +672,7 @@ async def resolve_dashboard_render_target(
672
672
  stable=False,
673
673
  warnings=(
674
674
  "No named view path was supplied; the built-in dashboard base route "
675
- "renders the first view visible to Puppet's Home Assistant user.",
675
+ "renders the first view visible to the screenshot engine's Home Assistant user.",
676
676
  ),
677
677
  )
678
678
  config = await fetch_dashboard_render_config(client, url_path)
@@ -0,0 +1,387 @@
1
+ """Locate a supported dashboard screenshot engine for this deployment.
2
+
3
+ The supported engines are balloob's **Puppet** app and the **WPE Screenshot
4
+ Engine** app. ha-mcp does not vendor either engine — the user installs them.
5
+
6
+ Three deployment modes, resolved lazily on first tool use (never at
7
+ startup, never silently installed):
8
+
9
+ 1. **Explicit** — ``HAMCP_DASHBOARD_SCREENSHOT_ENGINE_URL`` is set. Used
10
+ verbatim. This is the Docker / Container path (a docker-compose
11
+ sidecar), and also lets HA OS users override auto-discovery.
12
+ 2. **HA OS / Supervised** — ``SUPERVISOR_TOKEN`` is present. A supported app
13
+ (slug ``*_puppet`` or ``*_wpe_screenshot_engine``) is verified through the
14
+ Supervisor REST API and reached on the internal network by its hostname.
15
+ The user must install and start the app themselves — we never auto-install.
16
+ 3. **Neither** (stdio / standalone) — a clear :class:`ToolError` explaining
17
+ how to enable it.
18
+ """
19
+
20
+ from __future__ import annotations
21
+
22
+ import logging
23
+ import os
24
+ from dataclasses import dataclass
25
+ from typing import Any, Literal
26
+
27
+ import httpx
28
+
29
+ from ha_mcp._vendor.fastmcp.exceptions import ToolError
30
+
31
+ from ..errors import ErrorCode, create_error_response
32
+ from ..tools.helpers import raise_tool_error
33
+ from .theme_guard import EngineCredential, addon_credential_from_options
34
+
35
+ logger = logging.getLogger(__name__)
36
+
37
+ EngineKind = Literal["puppet", "wpe"]
38
+
39
+
40
+ @dataclass(frozen=True, slots=True)
41
+ class EngineTarget:
42
+ """A resolved screenshot engine endpoint.
43
+
44
+ ``addon_credential`` authenticates as Puppet's user (extracted from its
45
+ Supervisor options during discovery, so the theme guard needs no second
46
+ round-trip and the raw secret-bearing options dict never leaves this
47
+ module). ``engine_kind`` and ``engine_version`` are populated only when
48
+ Supervisor verifies the selected app. An explicit URL does not prove which
49
+ engine or version it targets. WPE temporarily applies frontend preferences
50
+ and does not need the guard credential. An explicit URL may still carry
51
+ Puppet's credential when Supervisor discovery finds it. The token never
52
+ leaves the server process — it must not be logged or surfaced in responses.
53
+ """
54
+
55
+ url: str
56
+ engine_kind: EngineKind | None = None
57
+ engine_version: str | None = None
58
+ addon_credential: EngineCredential | None = None
59
+
60
+
61
+ @dataclass(frozen=True, slots=True)
62
+ class _EngineProfile:
63
+ """Supervisor identity and network details for a supported renderer."""
64
+
65
+ name: str
66
+ kind: EngineKind
67
+ slug_suffix: str
68
+ port: int
69
+ required_schema_options: frozenset[str]
70
+ has_persistent_theme_override: bool = False
71
+
72
+
73
+ _PUPPET = _EngineProfile(
74
+ name="Puppet",
75
+ kind="puppet",
76
+ slug_suffix="_puppet",
77
+ port=10000,
78
+ required_schema_options=frozenset(
79
+ {"access_token", "home_assistant_url", "keep_browser_open"}
80
+ ),
81
+ has_persistent_theme_override=True,
82
+ )
83
+ _WPE = _EngineProfile(
84
+ name="WPE Screenshot Engine",
85
+ kind="wpe",
86
+ slug_suffix="_wpe_screenshot_engine",
87
+ port=8080,
88
+ required_schema_options=frozenset(
89
+ {"home_assistant_url", "home_assistant_token", "dashboard_path"}
90
+ ),
91
+ )
92
+ _SUPPORTED_ENGINES = (_PUPPET, _WPE)
93
+
94
+ _PUPPET_REPO_URL = "https://github.com/balloob/home-assistant-addons"
95
+ _WPE_REPO_URL = "https://github.com/Nischay-Pro/ha-wpe-screenshot-engine"
96
+
97
+ # The single source of truth for the "configure the engine token" instruction,
98
+ # reused across every engine-troubleshooting message here and in capture.py so
99
+ # a copy edit only has to happen once.
100
+ TOKEN_HINT = (
101
+ "set the engine's token option ('access_token' for "
102
+ "Puppet or 'home_assistant_token' for WPE Screenshot Engine) to a "
103
+ "Home Assistant long-lived access token (create one in Profile > Security, "
104
+ "ideally for a dedicated low-privilege user) and (re)start it"
105
+ )
106
+
107
+ _INSTALL_HELP = (
108
+ "Dashboard screenshot mode is enabled, but no supported screenshot "
109
+ "engine app is installed. On HA OS / Supervised, add either balloob's "
110
+ f"repository ({_PUPPET_REPO_URL}) or WPE Screenshot Engine's repository "
111
+ f"({_WPE_REPO_URL}) under Settings > Apps > Install app > ⋮ > Repositories "
112
+ "(Settings > Add-ons > Add-on store before Home Assistant 2026.2), then "
113
+ "install and start Puppet or WPE Screenshot Engine. "
114
+ f"{TOKEN_HINT}. On Docker / Container, run "
115
+ "one of these engines as a sidecar and set "
116
+ "HAMCP_DASHBOARD_SCREENSHOT_ENGINE_URL to its reachable URL."
117
+ )
118
+
119
+ _NOT_STARTED_HELP = (
120
+ "The supported screenshot engine app is installed but not started. Open "
121
+ "Settings > Apps > the selected engine (Settings > Add-ons before Home "
122
+ f"Assistant 2026.2), {TOKEN_HINT}. "
123
+ "Enable 'Start on boot' to keep it available."
124
+ )
125
+
126
+ _STDIO_HELP = (
127
+ "Dashboard screenshot mode needs either HA OS / Supervised with a "
128
+ "supported screenshot engine app installed, or a screenshot-engine "
129
+ "sidecar reachable via HAMCP_DASHBOARD_SCREENSHOT_ENGINE_URL. This "
130
+ "deployment (stdio / standalone) can host neither — see docs/beta.md."
131
+ )
132
+
133
+
134
+ def _verified_engine_profile(
135
+ slug: str, info: dict[str, Any], profiles: tuple[_EngineProfile, ...]
136
+ ) -> _EngineProfile | None:
137
+ """Return the profile whose slug, app name and schema all match."""
138
+ schema = info.get("schema")
139
+ schema_names = {
140
+ str(item.get("name"))
141
+ for item in schema or []
142
+ if isinstance(item, dict) and item.get("name") is not None
143
+ }
144
+ for profile in profiles:
145
+ if (
146
+ slug.endswith(profile.slug_suffix)
147
+ and info.get("name") == profile.name
148
+ and profile.required_schema_options <= schema_names
149
+ ):
150
+ return profile
151
+ return None
152
+
153
+
154
+ def _select_started_verified_engine(
155
+ addon_infos: list[tuple[str, dict[str, Any]]],
156
+ profiles: tuple[_EngineProfile, ...] = _SUPPORTED_ENGINES,
157
+ ) -> tuple[str, dict[str, Any], _EngineProfile]:
158
+ """Select one started app that exactly matches a supported engine."""
159
+ verified: list[tuple[str, dict[str, Any], _EngineProfile]] = []
160
+ for slug, info in addon_infos:
161
+ profile = _verified_engine_profile(slug, info, profiles)
162
+ if profile is not None:
163
+ verified.append((slug, info, profile))
164
+ if not verified:
165
+ raise_tool_error(
166
+ create_error_response(
167
+ ErrorCode.CONFIG_VALIDATION_FAILED,
168
+ "Installed screenshot engine apps did not match a supported "
169
+ "engine's expected identity and schema.",
170
+ context={"matched_slugs": [slug for slug, _ in addon_infos]},
171
+ suggestions=[
172
+ "Verify the app is Puppet or WPE Screenshot Engine and "
173
+ "matches its repository configuration"
174
+ ],
175
+ )
176
+ )
177
+ started = [item for item in verified if item[1].get("state") == "started"]
178
+ if not started:
179
+ raise_tool_error(
180
+ create_error_response(
181
+ ErrorCode.SERVICE_CALL_FAILED,
182
+ "The schema-verified screenshot engine app is not started.",
183
+ details=_NOT_STARTED_HELP,
184
+ context={"matched_slugs": [slug for slug, _, _ in verified]},
185
+ )
186
+ )
187
+ if len(started) > 1:
188
+ raise_tool_error(
189
+ create_error_response(
190
+ ErrorCode.CONFIG_VALIDATION_FAILED,
191
+ "Multiple started screenshot engine apps matched supported "
192
+ "schemas; "
193
+ "refusing an ambiguous target.",
194
+ context={"matched_slugs": [slug for slug, _, _ in started]},
195
+ )
196
+ )
197
+ return started[0]
198
+
199
+
200
+ def _supervisor_response_data(payload: Any, endpoint: str) -> dict[str, Any]:
201
+ """Return a Supervisor response's object-shaped data payload."""
202
+ if not isinstance(payload, dict):
203
+ raise ValueError(f"Supervisor {endpoint} returned a non-object payload")
204
+ data = payload.get("data")
205
+ if not isinstance(data, dict):
206
+ raise ValueError(f"Supervisor {endpoint} returned invalid data")
207
+ return data
208
+
209
+
210
+ def _supervisor_addon_listing(payload: Any) -> list[dict[str, Any]]:
211
+ """Return the validated add-on objects from a Supervisor list response."""
212
+ addons = _supervisor_response_data(payload, "/addons").get("addons")
213
+ if not isinstance(addons, list) or not all(
214
+ isinstance(addon, dict) for addon in addons
215
+ ):
216
+ raise ValueError("Supervisor /addons returned an invalid addons list")
217
+ return addons
218
+
219
+
220
+ async def resolve_engine() -> EngineTarget:
221
+ """Resolve the screenshot engine endpoint, or raise ToolError.
222
+
223
+ See module docstring for the three-mode resolution order.
224
+ """
225
+ from ..config import get_global_settings
226
+
227
+ explicit = (get_global_settings().dashboard_screenshot_engine_url or "").strip()
228
+ if explicit:
229
+ return EngineTarget(
230
+ url=explicit.rstrip("/"),
231
+ addon_credential=await _addon_credential_best_effort(),
232
+ )
233
+
234
+ if os.environ.get("SUPERVISOR_TOKEN"):
235
+ return await _discover_engine_via_supervisor()
236
+
237
+ raise_tool_error(
238
+ create_error_response(
239
+ ErrorCode.SERVICE_CALL_FAILED,
240
+ "Dashboard screenshot mode is not available in this deployment.",
241
+ details=_STDIO_HELP,
242
+ suggestions=[
243
+ "Use HA OS / Supervised and install the screenshot engine app",
244
+ "Or run the engine as a sidecar and set "
245
+ + "HAMCP_DASHBOARD_SCREENSHOT_ENGINE_URL",
246
+ ],
247
+ )
248
+ )
249
+ # raise_tool_error is typed -> NoReturn, but CodeQL cannot see that, so it
250
+ # reports py/mixed-returns for the implicit None fall-through past it. Keep
251
+ # this terminal statement to suppress that false positive (repo convention).
252
+ raise AssertionError("unreachable: raise_tool_error always raises")
253
+
254
+
255
+ async def _addon_credential_best_effort() -> EngineCredential | None:
256
+ """Best-effort theme-guard credential for an explicitly configured URL.
257
+
258
+ HA OS / Supervised users may set ``HAMCP_DASHBOARD_SCREENSHOT_ENGINE_URL``
259
+ to override auto-discovery while still running Puppet; without its token
260
+ the theme guard would go inactive exactly where the app credential exists
261
+ (``_client_credential`` refuses Supervisor-proxy auth).
262
+ Any failure — no Supervisor, no verified add-on, not started — simply
263
+ means "no credential": the explicit URL may point at a non-add-on
264
+ engine, so this must never raise. If the explicit URL targets a
265
+ different engine than the discovered add-on, the guard still only ever
266
+ writes back a value that the discovered add-on's own user changed
267
+ mid-capture, which only that add-on's renders would do — a safe no-op.
268
+ """
269
+ if not os.environ.get("SUPERVISOR_TOKEN"):
270
+ return None
271
+ try:
272
+ # The theme guard is specific to Puppet, whose current renderer writes
273
+ # theme changes to the Home Assistant user profile. WPE applies these
274
+ # options temporarily and suppresses the corresponding user-data write.
275
+ return (
276
+ await _discover_engine_via_supervisor(preferred_engine="Puppet")
277
+ ).addon_credential
278
+ except Exception:
279
+ logger.debug(
280
+ "No Supervisor-discoverable engine credential for the explicit "
281
+ "engine URL; the theme guard stays inactive.",
282
+ exc_info=True,
283
+ )
284
+ return None
285
+
286
+
287
+ async def _discover_engine_via_supervisor(
288
+ *, preferred_engine: str | None = None
289
+ ) -> EngineTarget:
290
+ """Find one supported app through the Supervisor and return its endpoint.
291
+
292
+ Requires the ha-mcp add-on's ``manager`` role (already declared) for the
293
+ read-only ``/addons`` + ``/addons/<slug>/info`` endpoints. Raises a
294
+ ToolError with actionable guidance when no matching engine is available.
295
+ ``preferred_engine`` is used only for the best-effort Puppet theme guard
296
+ when the operator configured an explicit URL.
297
+ """
298
+ from ..client.supervisor_client import make_supervisor_httpx_client
299
+
300
+ try:
301
+ async with make_supervisor_httpx_client(timeout=15.0, verify=True) as sup:
302
+ listing = await sup.get("/addons")
303
+ listing.raise_for_status()
304
+ addons = _supervisor_addon_listing(listing.json())
305
+
306
+ profiles = tuple(
307
+ profile
308
+ for profile in _SUPPORTED_ENGINES
309
+ if preferred_engine is None or profile.name == preferred_engine
310
+ )
311
+ matches = [
312
+ a
313
+ for a in addons
314
+ if str(a.get("slug", "")).endswith(
315
+ tuple(profile.slug_suffix for profile in profiles)
316
+ )
317
+ ]
318
+ if not matches:
319
+ engine_names = (
320
+ [preferred_engine]
321
+ if preferred_engine
322
+ else [profile.name for profile in _SUPPORTED_ENGINES]
323
+ )
324
+ raise_tool_error(
325
+ create_error_response(
326
+ ErrorCode.RESOURCE_NOT_FOUND,
327
+ "A supported screenshot engine app is not installed.",
328
+ context={"supported_engines": engine_names},
329
+ details=_INSTALL_HELP,
330
+ )
331
+ )
332
+
333
+ # The /addons list is only reliable for slug discovery (the
334
+ # repo-hash prefix is not known ahead of time). Per-addon details
335
+ # are authoritative on /addons/<slug>/info — the same source
336
+ # ha_manage_app trusts.
337
+ addon_infos: list[tuple[str, dict[str, Any]]] = []
338
+ for match in matches:
339
+ slug = str(match["slug"])
340
+ info = await sup.get(f"/addons/{slug}/info")
341
+ info.raise_for_status()
342
+ data = _supervisor_response_data(info.json(), f"/addons/{slug}/info")
343
+ addon_infos.append((slug, data))
344
+ slug, data, profile = _select_started_verified_engine(addon_infos, profiles)
345
+ hostname = data.get("hostname") or data.get("ip_address")
346
+ if not hostname:
347
+ raise_tool_error(
348
+ create_error_response(
349
+ ErrorCode.SERVICE_CALL_FAILED,
350
+ f"Screenshot engine app '{slug}' is started but "
351
+ "the Supervisor returned no hostname/ip_address.",
352
+ context={"slug": slug},
353
+ )
354
+ )
355
+ options = data.get("options")
356
+ app_version = data.get("version")
357
+ return EngineTarget(
358
+ url=f"http://{hostname}:{profile.port}",
359
+ engine_kind=profile.kind,
360
+ engine_version=(
361
+ app_version.strip()
362
+ if isinstance(app_version, str) and app_version.strip()
363
+ else None
364
+ ),
365
+ addon_credential=(
366
+ addon_credential_from_options(
367
+ options if isinstance(options, dict) else None
368
+ )
369
+ if profile.has_persistent_theme_override
370
+ else None
371
+ ),
372
+ )
373
+ except ToolError:
374
+ raise
375
+ except (httpx.HTTPError, KeyError, ValueError) as e:
376
+ logger.warning("Screenshot engine discovery via Supervisor failed: %s", e)
377
+ raise_tool_error(
378
+ create_error_response(
379
+ ErrorCode.CONNECTION_FAILED,
380
+ "Could not query the Supervisor to locate the screenshot engine app.",
381
+ details=str(e),
382
+ suggestions=[
383
+ "Verify the screenshot engine app is installed and started",
384
+ "Or set HAMCP_DASHBOARD_SCREENSHOT_ENGINE_URL explicitly",
385
+ ],
386
+ )
387
+ )