ha-mcp-dev 8.6.0.dev2888__tar.gz → 8.6.0.dev2889__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 (754) hide show
  1. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/PKG-INFO +1 -1
  2. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/pyproject.toml +1 -1
  3. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/pyproject.toml.orig +1 -1
  4. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/config_registry.py +4 -2
  5. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/config_settings.py +5 -0
  6. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/_handlers_tools.py +19 -2
  7. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/_tools_meta.py +35 -13
  8. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/locales/en.json +9 -0
  9. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/settings_js/01_i18n_state.js +1 -0
  10. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/settings_js/02_tools_restart.js +1 -0
  11. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/settings_js/03_render_save.js +26 -21
  12. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/settings_js/04_backups.js +8 -1
  13. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/backup.py +13 -55
  14. ha_mcp_dev-8.6.0.dev2889/src/ha_mcp/tools/backup_access.py +258 -0
  15. ha_mcp_dev-8.6.0.dev2889/src/ha_mcp/tools/bug_report_config.py +71 -0
  16. ha_mcp_dev-8.6.0.dev2889/src/ha_mcp/tools/dev_backup.py +84 -0
  17. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_bug_report.py +8 -49
  18. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_code.py +9 -9
  19. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_dev.py +7 -50
  20. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_service.py +5 -5
  21. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/LICENSE +0 -0
  22. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/README.md +0 -0
  23. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/__init__.py +0 -0
  24. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/__main__.py +0 -0
  25. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_pypi_marker +0 -0
  26. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_rich_compat.py +0 -0
  27. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/__init__.py +0 -0
  28. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
  29. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
  30. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
  31. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
  32. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
  33. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
  34. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
  35. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
  36. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
  37. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
  38. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
  39. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
  40. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
  41. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
  42. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
  43. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
  44. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
  45. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
  46. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
  47. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
  48. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
  49. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
  50. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
  51. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
  52. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
  53. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
  54. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
  55. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
  56. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
  57. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
  58. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
  59. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
  60. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
  61. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
  62. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
  63. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
  64. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
  65. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
  66. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
  67. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
  68. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
  69. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
  70. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
  71. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
  72. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
  73. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
  74. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
  75. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
  76. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
  77. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
  78. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
  79. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
  80. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
  81. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
  82. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
  83. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
  84. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
  85. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
  86. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
  87. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
  88. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
  89. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
  90. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
  91. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
  92. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
  93. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
  94. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
  95. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
  96. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
  97. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
  98. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
  99. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
  100. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
  101. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
  102. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
  103. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
  104. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
  105. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
  106. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
  107. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
  108. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
  109. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
  110. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
  111. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
  112. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
  113. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
  114. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
  115. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
  116. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
  117. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
  118. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
  119. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
  120. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
  121. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
  122. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
  123. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
  124. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
  125. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
  126. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
  127. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
  128. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
  129. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
  130. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
  131. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
  132. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
  133. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
  134. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
  135. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
  136. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
  137. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
  138. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
  139. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
  140. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
  141. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
  142. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
  143. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
  144. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
  145. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
  146. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
  147. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
  148. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
  149. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
  150. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
  151. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
  152. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
  153. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
  154. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
  155. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
  156. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
  157. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
  158. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
  159. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
  160. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
  161. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
  162. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
  163. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
  164. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
  165. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
  166. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
  167. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
  168. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
  169. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
  170. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
  171. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
  172. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
  173. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
  174. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
  175. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
  176. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
  177. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
  178. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
  179. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
  180. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
  181. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
  182. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
  183. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
  184. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
  185. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
  186. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
  187. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
  188. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
  189. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
  190. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
  191. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
  192. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
  193. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
  194. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
  195. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
  196. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
  197. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
  198. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
  199. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
  200. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
  201. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
  202. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
  203. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
  204. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
  205. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
  206. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
  207. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
  208. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
  209. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
  210. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
  211. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
  212. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
  213. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
  214. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
  215. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
  216. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
  217. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
  218. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
  219. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
  220. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
  221. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
  222. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
  223. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
  224. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
  225. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
  226. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
  227. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
  228. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
  229. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
  230. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
  231. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
  232. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
  233. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
  234. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
  235. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
  236. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
  237. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
  238. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
  239. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
  240. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
  241. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
  242. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
  243. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
  244. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
  245. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
  246. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
  247. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
  248. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
  249. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
  250. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
  251. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
  252. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
  253. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
  254. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
  255. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
  256. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
  257. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
  258. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
  259. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
  260. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
  261. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
  262. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
  263. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
  264. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
  265. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
  266. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
  267. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
  268. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
  269. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
  270. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
  271. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
  272. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
  273. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
  274. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
  275. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
  276. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
  277. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
  278. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
  279. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
  280. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
  281. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
  282. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
  283. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
  284. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
  285. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
  286. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
  287. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
  288. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
  289. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
  290. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
  291. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
  292. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
  293. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
  294. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
  295. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
  296. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
  297. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
  298. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
  299. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
  300. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
  301. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
  302. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
  303. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
  304. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
  305. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
  306. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
  307. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
  308. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
  309. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
  310. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
  311. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
  312. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
  313. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
  314. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
  315. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
  316. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
  317. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
  318. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
  319. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
  320. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
  321. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
  322. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
  323. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
  324. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
  325. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
  326. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
  327. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
  328. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
  329. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
  330. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
  331. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
  332. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
  333. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
  334. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
  335. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
  336. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
  337. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
  338. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
  339. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
  340. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
  341. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
  342. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
  343. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
  344. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
  345. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
  346. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
  347. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
  348. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
  349. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
  350. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
  351. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
  352. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
  353. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
  354. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
  355. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
  356. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
  357. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
  358. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
  359. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
  360. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
  361. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
  362. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
  363. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
  364. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
  365. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
  366. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
  367. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
  368. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
  369. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
  370. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
  371. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
  372. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
  373. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
  374. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
  375. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
  376. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
  377. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
  378. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
  379. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
  380. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
  381. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
  382. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
  383. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
  384. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
  385. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
  386. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
  387. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
  388. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
  389. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
  390. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
  391. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
  392. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
  393. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
  394. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
  395. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
  396. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
  397. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
  398. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
  399. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
  400. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
  401. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
  402. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
  403. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
  404. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
  405. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
  406. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
  407. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
  408. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
  409. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
  410. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
  411. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
  412. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
  413. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
  414. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
  415. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
  416. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
  417. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
  418. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
  419. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
  420. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
  421. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
  422. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
  423. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
  424. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
  425. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
  426. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
  427. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
  428. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
  429. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
  430. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
  431. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
  432. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
  433. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
  434. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
  435. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
  436. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
  437. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
  438. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/requirements.txt +0 -0
  439. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
  440. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
  441. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
  442. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
  443. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
  444. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
  445. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
  446. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
  447. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
  448. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
  449. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
  450. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
  451. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
  452. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/client.py +0 -0
  453. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
  454. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
  455. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
  456. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
  457. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
  458. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
  459. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
  460. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
  461. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
  462. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
  463. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
  464. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
  465. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
  466. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
  467. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
  468. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
  469. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
  470. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
  471. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
  472. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
  473. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
  474. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
  475. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/server.py +0 -0
  476. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
  477. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
  478. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
  479. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
  480. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
  481. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
  482. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
  483. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
  484. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
  485. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
  486. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
  487. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
  488. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
  489. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
  490. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
  491. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
  492. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
  493. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
  494. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/version.py +0 -0
  495. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_version.py +0 -0
  496. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/app_discovery.py +0 -0
  497. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/auth/__init__.py +0 -0
  498. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/auth/consent_form.py +0 -0
  499. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/auth/oidc_compat.py +0 -0
  500. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/auth/provider.py +0 -0
  501. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/backup_manager.py +0 -0
  502. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/browser_landing.py +0 -0
  503. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/client/__init__.py +0 -0
  504. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/client/admin_routes.py +0 -0
  505. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/client/rest_client.py +0 -0
  506. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/client/supervisor_client.py +0 -0
  507. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/client/websocket_client.py +0 -0
  508. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/client/websocket_listener.py +0 -0
  509. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/config.py +0 -0
  510. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/config_backup.py +0 -0
  511. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/config_overrides.py +0 -0
  512. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
  513. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
  514. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
  515. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
  516. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
  517. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
  518. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/errors.py +0 -0
  519. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/ha_request_queue.py +0 -0
  520. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/hacs_auto_refresh.py +0 -0
  521. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/http_transport.py +0 -0
  522. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/llm_exposure.py +0 -0
  523. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/log_filters.py +0 -0
  524. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/policy/__init__.py +0 -0
  525. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/policy/approval_queue.py +0 -0
  526. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/policy/decision_pin.py +0 -0
  527. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/policy/decisions.py +0 -0
  528. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/policy/editing.py +0 -0
  529. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/policy/evaluator.py +0 -0
  530. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/policy/events.py +0 -0
  531. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/policy/handlers.py +0 -0
  532. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/policy/middleware.py +0 -0
  533. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/policy/model.py +0 -0
  534. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/policy/mrtr.py +0 -0
  535. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/policy/persistence.py +0 -0
  536. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/policy/server_channels.py +0 -0
  537. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/policy/value_sources.py +0 -0
  538. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/py.typed +0 -0
  539. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/read_only.py +0 -0
  540. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/redaction.py +0 -0
  541. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/renamed_tools.py +0 -0
  542. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  543. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  544. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
  545. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-actions.md +0 -0
  546. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
  547. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
  548. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  549. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  550. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  551. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  552. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  553. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  554. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  555. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
  556. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  557. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/triggers-and-conditions.md +0 -0
  558. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
  559. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/server.py +0 -0
  560. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/server_lifespan.py +0 -0
  561. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/server_tool_text.py +0 -0
  562. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/__init__.py +0 -0
  563. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
  564. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
  565. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
  566. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
  567. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
  568. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/_i18n.py +0 -0
  569. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
  570. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/_persistence.py +0 -0
  571. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
  572. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/_theme.py +0 -0
  573. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/locales/README.md +0 -0
  574. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/locales/az.json +0 -0
  575. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
  576. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/locales/de.json +0 -0
  577. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
  578. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/locales/es.json +0 -0
  579. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
  580. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/locales/it.json +0 -0
  581. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
  582. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
  583. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
  584. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
  585. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
  586. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
  587. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
  588. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
  589. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/settings.css +0 -0
  590. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/settings.html +0 -0
  591. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/settings_js/05_feature_flags.js +0 -0
  592. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/settings_js/06_policy_cards.js +0 -0
  593. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/settings_js/07_policy_actions.js +0 -0
  594. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/settings_js/08_advanced.js +0 -0
  595. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/settings_js/09_prefs_visibility.js +0 -0
  596. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/smoke_test.py +0 -0
  597. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  598. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/strict_bps.py +0 -0
  599. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tool_dispatch.py +0 -0
  600. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/__init__.py +0 -0
  601. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/area_messages.py +0 -0
  602. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/auto_backup.py +0 -0
  603. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  604. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/best_practice_result.py +0 -0
  605. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/best_practice_variables.py +0 -0
  606. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/blueprint_sources.py +0 -0
  607. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
  608. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/blueprint_write.py +0 -0
  609. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/bug_report_templates.py +0 -0
  610. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/bulk_selector.py +0 -0
  611. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/coercion.py +0 -0
  612. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/component_api.py +0 -0
  613. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/component_config_entries.py +0 -0
  614. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/component_config_reads.py +0 -0
  615. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
  616. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/component_devices.py +0 -0
  617. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/component_helper_collections.py +0 -0
  618. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/component_registries.py +0 -0
  619. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
  620. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/config_entry_flow.py +0 -0
  621. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
  622. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
  623. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
  624. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/config_entry_identity.py +0 -0
  625. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
  626. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
  627. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/config_helpers/__init__.py +0 -0
  628. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/config_helpers/create.py +0 -0
  629. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/config_helpers/flow.py +0 -0
  630. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/config_helpers/listing.py +0 -0
  631. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/config_helpers/registry.py +0 -0
  632. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/config_helpers/schemas.py +0 -0
  633. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/config_helpers/typed_config.py +0 -0
  634. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/config_helpers/update.py +0 -0
  635. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/config_helpers/validation.py +0 -0
  636. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/config_write_helpers.py +0 -0
  637. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
  638. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/dashboard_list_checks.py +0 -0
  639. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/device_control.py +0 -0
  640. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/device_enrichment.py +0 -0
  641. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/diagnostics_helpers.py +0 -0
  642. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/entity_param_parsing.py +0 -0
  643. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/entity_registration.py +0 -0
  644. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/entity_update_fields.py +0 -0
  645. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/error_log_parsing.py +0 -0
  646. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/hacs_registration.py +0 -0
  647. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/helpers.py +0 -0
  648. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
  649. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/log_common.py +0 -0
  650. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/log_sources.py +0 -0
  651. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/log_sources_fault.py +0 -0
  652. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
  653. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/radio/__init__.py +0 -0
  654. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/radio/base.py +0 -0
  655. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/radio/matter.py +0 -0
  656. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/radio/thread.py +0 -0
  657. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/radio/zigbee.py +0 -0
  658. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/radio/zwave.py +0 -0
  659. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/reference_validator.py +0 -0
  660. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/registry.py +0 -0
  661. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
  662. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/response_helpers.py +0 -0
  663. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/scene_discovery.py +0 -0
  664. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/search/__init__.py +0 -0
  665. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/search/base.py +0 -0
  666. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/search/component.py +0 -0
  667. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/search/entities.py +0 -0
  668. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/search/legacy.py +0 -0
  669. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/search/modes.py +0 -0
  670. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/search/overview.py +0 -0
  671. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/search/response.py +0 -0
  672. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/search/state.py +0 -0
  673. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  674. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  675. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  676. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
  677. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  678. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  679. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
  680. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  681. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  682. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  683. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tool_hints.py +0 -0
  684. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
  685. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_addons.py +0 -0
  686. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_areas.py +0 -0
  687. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
  688. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  689. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_calendar.py +0 -0
  690. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_camera.py +0 -0
  691. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_categories.py +0 -0
  692. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_config_automations.py +0 -0
  693. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
  694. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  695. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
  696. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
  697. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
  698. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_energy.py +0 -0
  699. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_entities.py +0 -0
  700. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  701. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_groups.py +0 -0
  702. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_hacs.py +0 -0
  703. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_history.py +0 -0
  704. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_integrations.py +0 -0
  705. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_labels.py +0 -0
  706. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_logs.py +0 -0
  707. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_radio.py +0 -0
  708. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_registry.py +0 -0
  709. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_resources.py +0 -0
  710. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_search.py +0 -0
  711. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_security_policy.py +0 -0
  712. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_services.py +0 -0
  713. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_system.py +0 -0
  714. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_themes.py +0 -0
  715. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_todo.py +0 -0
  716. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_traces.py +0 -0
  717. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_updates.py +0 -0
  718. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_utility.py +0 -0
  719. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  720. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  721. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
  722. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_zones.py +0 -0
  723. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/util_helpers.py +0 -0
  724. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/validation_middleware.py +0 -0
  725. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/ws_waiters.py +0 -0
  726. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/transforms/__init__.py +0 -0
  727. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/transforms/categorized_search.py +0 -0
  728. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/transforms/component_helpers.py +0 -0
  729. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/transforms/component_search.py +0 -0
  730. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  731. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/transforms/write_tool_note.py +0 -0
  732. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/transport_security.py +0 -0
  733. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/update_check.py +0 -0
  734. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/utils/__init__.py +0 -0
  735. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/utils/config_hash.py +0 -0
  736. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/utils/config_write_lock.py +0 -0
  737. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/utils/dashboard_patch.py +0 -0
  738. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/utils/data_paths.py +0 -0
  739. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
  740. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/utils/domain_handlers.py +0 -0
  741. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/utils/entity_membership.py +0 -0
  742. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  743. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  744. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/utils/mcp_client_host.py +0 -0
  745. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/utils/operation_manager.py +0 -0
  746. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/utils/python_sandbox.py +0 -0
  747. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/utils/registry_update_lock.py +0 -0
  748. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/utils/skill_loader.py +0 -0
  749. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/utils/usage_logger.py +0 -0
  750. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/visibility/__init__.py +0 -0
  751. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/visibility/enforcement.py +0 -0
  752. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/visibility/model.py +0 -0
  753. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/visibility/persistence.py +0 -0
  754. {ha_mcp_dev-8.6.0.dev2888 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/visibility/resolver.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ha-mcp-dev
3
- Version: 8.6.0.dev2888
3
+ Version: 8.6.0.dev2889
4
4
  Summary: Home Assistant MCP Server - Complete control of Home Assistant through MCP
5
5
  Keywords: mcp,home-assistant,ai,automation,smart-home
6
6
  Author: Julien
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "8.6.0.dev2888"
7
+ version = "8.6.0.dev2889"
8
8
  description = "Home Assistant MCP Server - Complete control of Home Assistant through MCP"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13,<3.15"
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "8.6.0.dev2888"
7
+ version = "8.6.0.dev2889"
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
@@ -457,12 +457,12 @@ ADDON_SYNCED_ADVANCED_FIELDS: tuple[str, ...] = (
457
457
  )
458
458
 
459
459
 
460
- # Auto-backup runtime-editable fields (#1288 web UI editor). Each entry
460
+ # Backup runtime-editable fields (#1288 web UI editor). Each entry
461
461
  # is (field_name, env_var_name, python_type). The web UI's
462
462
  # /api/settings/backups/config GET/POST endpoints iterate this tuple to
463
463
  # advertise per-field origin (env / addon / file / default) and to
464
464
  # validate incoming writes. Keep aligned with the matching ``Settings``
465
- # fields above — adding a fourth runtime-editable setting means a new
465
+ # fields above — adding a runtime-editable setting means a new
466
466
  # tuple entry plus matching addon ``config.yaml`` schema mirror.
467
467
  BACKUP_OVERRIDE_FIELDS: tuple[BackupOverrideField, ...] = (
468
468
  BackupOverrideField("enable_auto_backup", "ENABLE_AUTO_BACKUP", bool),
@@ -478,6 +478,8 @@ BACKUP_OVERRIDE_FIELDS: tuple[BackupOverrideField, ...] = (
478
478
  "HAMCP_AUTO_BACKUP_CALENDAR_LOOKAHEAD_DAYS",
479
479
  int,
480
480
  ),
481
+ BackupOverrideField("enable_snapshot_actions", "ENABLE_SNAPSHOT_ACTIONS", bool),
482
+ BackupOverrideField("backup_read_only", "BACKUP_READ_ONLY", bool),
481
483
  BackupOverrideField("enable_snapshot_delete", "ENABLE_SNAPSHOT_DELETE", bool),
482
484
  BackupOverrideField(
483
485
  "snapshot_delete_min_age_days", "SNAPSHOT_DELETE_MIN_AGE_DAYS", int
@@ -425,6 +425,11 @@ class Settings(BaseSettings):
425
425
  7, ge=1, le=365, alias="HAMCP_AUTO_BACKUP_CALENDAR_LOOKAHEAD_DAYS"
426
426
  )
427
427
 
428
+ # Human-managed controls for explicit backup tool operations. Automatic
429
+ # pre-edit capture follows enable_auto_backup independently.
430
+ enable_snapshot_actions: bool = Field(True, alias="ENABLE_SNAPSHOT_ACTIONS")
431
+ backup_read_only: bool = Field(False, alias="BACKUP_READ_ONLY")
432
+
428
433
  # Snapshot-tarball deletion gate (#1861). Off by default: an agent
429
434
  # deleting a full HA snapshot is categorically riskier than the
430
435
  # lightweight `edits`-scope auto-backups (which already delete freely),
@@ -25,6 +25,8 @@ from ._tools_meta import (
25
25
  BPS_MANDATORY_TOOLS,
26
26
  _get_tool_metadata,
27
27
  gate_is_beta,
28
+ ignored_disabled_tools,
29
+ tool_config_warnings,
28
30
  )
29
31
 
30
32
  if TYPE_CHECKING:
@@ -87,11 +89,10 @@ def _bps_locked_tools() -> list[str]:
87
89
  if not (settings.enable_mandatory_bps and settings.enable_strict_mandatory_bps):
88
90
  return []
89
91
  except Exception:
90
- logger.warning(
92
+ logger.exception(
91
93
  "settings lookup failed while computing BPS-locked tools; "
92
94
  "locking %s conservatively",
93
95
  ", ".join(sorted(BPS_MANDATORY_TOOLS)),
94
- exc_info=True,
95
96
  )
96
97
  return sorted(BPS_MANDATORY_TOOLS)
97
98
 
@@ -114,6 +115,21 @@ def _stub_gate_is_beta(tool: dict[str, Any]) -> bool:
114
115
  return bool(declared)
115
116
 
116
117
 
118
+ def _ignored_disable_diagnostics(config: dict[str, Any]) -> dict[str, Any]:
119
+ """Allow the Tools page to retain its conservative BPS lock on lookup errors."""
120
+ from ..config import get_global_settings
121
+
122
+ try:
123
+ settings = get_global_settings()
124
+ return {
125
+ "ignored_disabled_tools": ignored_disabled_tools(config, settings),
126
+ "tool_config_warnings": tool_config_warnings(config, settings),
127
+ }
128
+ except Exception:
129
+ logger.exception("Failed to read settings for mandatory-disable diagnostics")
130
+ return {"ignored_disabled_tools": None, "tool_config_warnings": None}
131
+
132
+
117
133
  def _env_pinned_conflicts(
118
134
  states: dict[str, str], env_pinned: dict[str, str]
119
135
  ) -> list[str]:
@@ -189,6 +205,7 @@ async def _get_tools(
189
205
  "tools": tools,
190
206
  "states": states,
191
207
  "env_pinned": pinned,
208
+ **_ignored_disable_diagnostics(config),
192
209
  "read_only_exempt": sorted(READ_ONLY_EXEMPT_TOOLS),
193
210
  "llm_api": llm_effective,
194
211
  "llm_api_overrides": llm_overrides,
@@ -138,6 +138,39 @@ def effective_mandatory_tools(settings: Settings) -> set[str]:
138
138
  return set(MANDATORY_TOOLS)
139
139
 
140
140
 
141
+ def ignored_disabled_tools(config: dict[str, Any], settings: Settings) -> list[str]:
142
+ """Return mandatory tools whose requested disable state is ignored."""
143
+ mandatory = effective_mandatory_tools(settings)
144
+ return sorted(
145
+ name
146
+ for name, state in config.get("tools", {}).items()
147
+ if state == "disabled" and name in mandatory
148
+ )
149
+
150
+
151
+ def mandatory_disable_warning(name: str) -> str:
152
+ """Explain the ignored request, including the strict BPS dependency."""
153
+ warning = (
154
+ f"Ignoring disabled_tools entry '{name}': "
155
+ "this tool is mandatory and remains enabled."
156
+ )
157
+ if name in BPS_MANDATORY_TOOLS:
158
+ warning += (
159
+ " Strict best-practices mode (enable_strict_mandatory_bps) is on "
160
+ "and publishes its acknowledgment key only through it. "
161
+ "Turn strict mode off first to disable the tool."
162
+ )
163
+ return warning
164
+
165
+
166
+ def tool_config_warnings(config: dict[str, Any], settings: Settings) -> list[str]:
167
+ """Share mandatory disable warnings across startup, settings, and reports."""
168
+ return [
169
+ mandatory_disable_warning(name)
170
+ for name in ignored_disabled_tools(config, settings)
171
+ ]
172
+
173
+
141
174
  # Tools created by FastMCP transforms (not registered through
142
175
  # local_provider). No transform-generated tools are currently in use —
143
176
  # ``ha_get_skill_guide`` is registered the normal way and is visible
@@ -400,19 +433,8 @@ def apply_tool_visibility(
400
433
  disabled_names.add("ha_config_set_yaml")
401
434
 
402
435
  mandatory = effective_mandatory_tools(settings)
403
- stripped_bps = disabled_names & mandatory & BPS_MANDATORY_TOOLS
404
- if stripped_bps:
405
- # The save handlers reject this combination, but env seeds and
406
- # hand-edited tool_config.json bypass them — keep the tool on and
407
- # say why, rather than silently locking out every strict-gated
408
- # write (the acknowledgment key is published only through it).
409
- logger.warning(
410
- "Keeping %s enabled despite a disable entry: strict "
411
- "best-practices mode (enable_strict_mandatory_bps) is on and "
412
- "publishes its acknowledgment key only through it. Turn "
413
- "strict mode off first to disable the tool.",
414
- ", ".join(sorted(stripped_bps)),
415
- )
436
+ for warning in tool_config_warnings(config, settings):
437
+ logger.warning("%s", warning)
416
438
  disabled_names -= mandatory
417
439
 
418
440
  if disabled_names:
@@ -234,6 +234,7 @@
234
234
  "tools.notes.beta_disabled": "Beta. Set {setting} in the dev app (add-on) config or matching environment variable (see docs/beta.md).",
235
235
  "tools.notes.env_pinned": "Pinned by {variable}. Unset the environment variable to edit here.",
236
236
  "tools.notes.bps_locked": "Locked while Strict best-practices mode is on. Turn that setting off first to disable this tool.",
237
+ "tools.notes.mandatory_disabled_ignored": "Disable request ignored: this tool is mandatory and remains enabled.",
237
238
  "tools.notes.read_only_off": "Off. Read Only Mode is on; write tools are disabled.",
238
239
  "tools.notes.read_only_partial": "Read Only Mode: write operations of this tool are blocked; read operations stay available.",
239
240
  "tools.llm_api.label": "LLM API",
@@ -253,6 +254,10 @@
253
254
  "tools.read_only.save_failed": "Read Only Mode change did not save. The server still has the previous value.",
254
255
  "backup.fields.enable_auto_backup.label": "Auto-backup edits",
255
256
  "backup.fields.enable_auto_backup.help": "Capture a snapshot before every wrapped write or destructive tool call.",
257
+ "backup.fields.enable_snapshot_actions.label": "Allow full HA snapshot actions",
258
+ "backup.fields.enable_snapshot_actions.help": "Allow AI assistants to manage full Home Assistant snapshots through ha_manage_backup and the equivalent backup services and commands in ha_call_service. Turning this off blocks every snapshot action, including listing. Snapshot deletion is only available through ha_manage_backup and also requires Allow snapshot deletion. Edit backups and human actions in this page remain available.",
259
+ "backup.fields.backup_read_only.label": "Make backup management read-only",
260
+ "backup.fields.backup_read_only.help": "Allow AI assistants to list, view, and diff edit backups, and list full HA snapshots when snapshot actions are enabled. Block manual backup create, restore (including edit restores), and delete, including the equivalent backup services and commands in ha_call_service. Automatic pre-edit backups continue. Human actions in this page remain available.",
256
261
  "backup.fields.auto_backup_throttle_minutes.label": "Throttle (minutes)",
257
262
  "backup.fields.auto_backup_throttle_minutes.help": "Per-entity throttle. 0 = every write; N > 0 = at most one backup per N minutes. Range 0–1440.",
258
263
  "backup.fields.auto_backup_retain_per_entity.label": "Retain per entity",
@@ -495,6 +500,10 @@
495
500
  "addon.enable_security_policy_tool.name": "Let AI agents edit tool security policies",
496
501
  "addon.enable_security_policy_tool.description": "Registers the ha_manage_security_policy tool, which lets connected AI agents read and rewrite the tool security policies — including removing approval gates. Off by default. Independent of the Tool Security Policies option above: this controls who can edit the rules, not whether they are enforced. The tool cannot see or decide pending approvals. To keep a human in the loop, gate the tool before enabling it: switch on \"security gated\" for Manage Security Policy in the Tools tab of the web UI. Requires restart to take effect.",
497
502
  "addon.enable_auto_backup.name": "Enable auto-backup of edits",
503
+ "addon.enable_snapshot_actions.name": "Allow full HA snapshot actions",
504
+ "addon.enable_snapshot_actions.description": "Allow AI assistants to manage full Home Assistant snapshots through ha_manage_backup(scope='snapshot') and the equivalent backup services and commands in ha_call_service. Turning this off blocks every snapshot action, including listing, while edit backups remain available. Snapshot deletion is only available through ha_manage_backup, also requires enable_snapshot_delete, and its protections still apply. On by default. Change this option or use the web Settings UI Backups tab; requires restart in the app.",
505
+ "addon.backup_read_only.name": "Make backup management read-only",
506
+ "addon.backup_read_only.description": "Restrict ha_manage_backup to listing, viewing, and diffing edit backups, and listing full HA snapshots when snapshot actions are enabled. Blocks manual backup create, restore (including edit restores), and delete, including the equivalent backup services and commands in ha_call_service. Automatic pre-edit backups continue, and human actions in the web Settings UI remain available. Off by default; requires restart in the app.",
498
507
  "addon.enable_auto_backup.description": "Captures a per-entity snapshot before every wrapped write/destructive MCP tool call (automation, script, scene, helper, dashboard, dashboard resource, label, category, group, zone, area, calendar, todo, entity, device, integration, and sibling remove/delete tools). The auto-backup throttle bounds how often that happens: 0 (default) captures on every such call, N>0 at most one snapshot per N minutes per entity. Snapshots are saved as YAML files under /data/ha_mcp_backups/ (override via HAMCP_BACKUP_DIR) and listed, restored, or deleted via the Backups tab in the web settings UI or via ha_manage_backup(scope='edits', ...). For those domains the capture is best-effort — a failure logs a WARNING and the write proceeds. The file and raw-YAML tools are the exception: ha_write_file, ha_delete_file and ha_config_set_yaml treat the snapshot as a precondition, so a write through them is refused while this is off, and a failed capture blocks it. On by default; unchecking opts out of the best-effort captures and takes the file and raw-YAML tools out of service with them. Requires restart to take effect.",
499
508
  "addon.auto_backup_throttle_minutes.name": "Auto-backup throttle (minutes)",
500
509
  "addon.auto_backup_throttle_minutes.description": "Per-entity throttle window. 0 (default) captures a snapshot on every wrapped write. N>0 captures at most one snapshot per N minutes per entity. Range 0–1440.",
@@ -204,6 +204,7 @@ let toolEnvPinned = {};
204
204
  // Server-side saves reject the conflict too — this lock is the
205
205
  // courteous UI half.
206
206
  let bpsLockedTools = new Set();
207
+ let ignoredDisabledTools = new Set();
207
208
  // Conversation-agent LLM API exposure (#1745). toolLlm mirrors the
208
209
  // server-computed EFFECTIVE value per tool (user override, else the
209
210
  // deny-by-default for beta/dev/restart tools); toolLlmOverrides holds
@@ -33,6 +33,7 @@ async function loadTools() {
33
33
  toolStates = data.states || {};
34
34
  toolEnvPinned = data.env_pinned || {};
35
35
  bpsLockedTools = new Set(data.bps_locked_tools || []);
36
+ ignoredDisabledTools = new Set(data.ignored_disabled_tools || []);
36
37
  toolLlm = data.llm_api || {};
37
38
  toolLlmOverrides = data.llm_api_overrides || {};
38
39
  llmApiAvailable = !!data.llm_api_available;
@@ -16,7 +16,7 @@ function isReadOnlyForcedOff(t) {
16
16
  const ann = t.annotations || {};
17
17
  if (ann.readOnlyHint === true) return false;
18
18
  if (READ_ONLY_EXEMPT.has(t.name)) return false;
19
- if (MANDATORY.includes(t.name)) return false;
19
+ if (MANDATORY.includes(t.name) || bpsLockedTools.has(t.name)) return false;
20
20
  return true;
21
21
  }
22
22
 
@@ -81,11 +81,11 @@ function render() {
81
81
  !isReadOnlyForcedOff(t));
82
82
  const anyEnabled = toggleable.some(t => getState(t.name) !== 'disabled');
83
83
  const groupEnabled = tools.filter(t => {
84
+ if (MANDATORY.includes(t.name) || bpsLockedTools.has(t.name)) return true;
84
85
  if (isReadOnlyForcedOff(t)) return false;
85
86
  if (toolEnvPinned[t.name]) return toolEnvPinned[t.name] !== 'disabled';
86
87
  const s = getState(t.name);
87
- return MANDATORY.includes(t.name) || bpsLockedTools.has(t.name) ||
88
- (!t.disabled_by && s !== 'disabled');
88
+ return !t.disabled_by && s !== 'disabled';
89
89
  }).length;
90
90
 
91
91
  // Master-switch checked state. Normally it mirrors "any toggleable tool
@@ -168,8 +168,8 @@ function render() {
168
168
  const isFeatureGated = disabledBy !== null;
169
169
  // env_pinned: "disabled" | "pinned" | undefined — operator-level lock
170
170
  // via DISABLED_TOOLS / PINNED_TOOLS env vars. When set, all inputs are
171
- // disabled and a banner names the env var. Takes precedence over
172
- // isMandatory / isFeatureGated for the lock calculation.
171
+ // disabled and a banner names the env var. Mandatory tools stay on
172
+ // regardless, while the requested state remains intact for saves.
173
173
  const envPinKind = toolEnvPinned[t.name]; // "disabled" | "pinned" | undefined
174
174
  const isEnvPinned = !!envPinKind;
175
175
  const envPinVar = envPinKind === 'disabled' ? 'DISABLED_TOOLS' :
@@ -185,22 +185,18 @@ function render() {
185
185
  const roForcedOff = isReadOnlyForcedOff(t);
186
186
  const roExemptActive = readOnlyState.enabled && READ_ONLY_EXEMPT.has(t.name);
187
187
 
188
- total++;
189
- if (roForcedOff) disabledCount++;
190
- else if (isEnvPinned) {
191
- if (envPinKind === 'disabled') disabledCount++;
192
- else { enabledCount++; pinnedCount++; }
193
- } else if (isFeatureGated) disabledCount++;
194
- else if (state === 'disabled') disabledCount++;
195
- else if (state === 'pinned') { enabledCount++; pinnedCount++; }
196
- else enabledCount++;
197
-
198
- const isEnabled = roForcedOff ? false : (isEnvPinned
188
+ const isEnabled = isMandatory || (roForcedOff ? false : (isEnvPinned
199
189
  ? (envPinKind !== 'disabled')
200
- : (isFeatureGated ? false : (isMandatory || state !== 'disabled')));
201
- const isPinned = roForcedOff ? false : (isEnvPinned
190
+ : (isFeatureGated ? false : state !== 'disabled')));
191
+ const isPinned = isMandatory ? (DEFAULT_PINNED.includes(t.name) || state === 'pinned' || envPinKind === 'pinned') : (roForcedOff ? false : (isEnvPinned
202
192
  ? (envPinKind === 'pinned')
203
- : (isFeatureGated ? false : (isMandatory || state === 'pinned' || DEFAULT_PINNED.includes(t.name))));
193
+ : (isFeatureGated ? false : (state === 'pinned' || DEFAULT_PINNED.includes(t.name)))));
194
+ total++;
195
+ if (!isEnabled) disabledCount++;
196
+ else {
197
+ enabledCount++;
198
+ if (isPinned) pinnedCount++;
199
+ }
204
200
  const lockEnabled = roForcedOff || isEnvPinned || isMandatory || isFeatureGated;
205
201
  const lockPinned = roForcedOff || isEnvPinned || isMandatory || isFeatureGated || !isEnabled;
206
202
  // The security gate is a policy RULE keyed by tool name, so it can be
@@ -250,7 +246,16 @@ function render() {
250
246
  )
251
247
  }</div>`
252
248
  : '';
253
- const envPinnedNote = isEnvPinned
249
+ const ignoredDisable = isMandatory && (ignoredDisabledTools.has(t.name) ||
250
+ state === 'disabled' || envPinKind === 'disabled');
251
+ const ignoredDisableNote = ignoredDisable
252
+ ? `<div class="feature-locked-note">${escapeHtml(tr(
253
+ 'tools.notes.mandatory_disabled_ignored',
254
+ {},
255
+ 'Disable request ignored: this tool is mandatory and remains enabled.'
256
+ ))}</div>`
257
+ : '';
258
+ const envPinnedNote = isEnvPinned && !ignoredDisable
254
259
  ? `<div class="feature-locked-note">${tHtml(
255
260
  'tools.notes.env_pinned',
256
261
  {variable: `<code>${escapeHtml(envPinVar)}</code>`},
@@ -297,6 +302,7 @@ function render() {
297
302
  (desc ? `<div class="tool-desc">${escapeHtml(desc)}</div>` : '') +
298
303
  gatedNote +
299
304
  envPinnedNote +
305
+ ignoredDisableNote +
300
306
  bpsLockedNote +
301
307
  readOnlyNote +
302
308
  `</div>` +
@@ -581,4 +587,3 @@ function applyToolSearch() {
581
587
  document.getElementById('search').addEventListener('input', applyToolSearch);
582
588
 
583
589
  document.getElementById('restartBtn').addEventListener('click', restartAddon);
584
-
@@ -3,6 +3,14 @@ let backupEntries = [];
3
3
  let backupConfigFields = [];
4
4
 
5
5
  const BACKUP_FIELD_LABELS = {
6
+ enable_snapshot_actions: {
7
+ label: 'Allow full HA snapshot actions',
8
+ help: 'Allow AI assistants to manage full Home Assistant snapshots through ha_manage_backup. Turning this off blocks every snapshot action, including listing. Snapshot deletion also requires Allow snapshot deletion. Edit backups and human actions in this page remain available.',
9
+ },
10
+ backup_read_only: {
11
+ label: 'Make backup management read-only',
12
+ help: 'Allow AI assistants to list, view, and diff edit backups, and list full HA snapshots when snapshot actions are enabled. Block manual backup create, restore (including edit restores), and delete. Automatic pre-edit backups continue. Human actions in this page remain available.',
13
+ },
6
14
  enable_auto_backup: {
7
15
  label: 'Auto-backup edits',
8
16
  help: 'Capture a snapshot before every wrapped write/destructive tool call.',
@@ -636,4 +644,3 @@ document.getElementById('modalBackdrop').addEventListener('click', (e) => {
636
644
  });
637
645
 
638
646
  document.getElementById('stopSidecarBtn').addEventListener('click', stopSidecar);
639
-
@@ -43,6 +43,15 @@ from ..client.rest_client import (
43
43
  from ..client.websocket_client import HomeAssistantWebSocketClient, get_websocket_client
44
44
  from ..config import get_global_settings
45
45
  from ..errors import ErrorCode, create_error_response
46
+ from .backup_access import (
47
+ gate_backup_combo as _gate_combo,
48
+ )
49
+ from .backup_access import (
50
+ require_backup_access,
51
+ )
52
+ from .backup_access import (
53
+ require_backup_param as _require,
54
+ )
46
55
  from .component_api import (
47
56
  component_supports,
48
57
  get_component_caps,
@@ -1563,60 +1572,6 @@ async def _execute_snapshot_delete(
1563
1572
  }
1564
1573
 
1565
1574
 
1566
- # Valid (scope, action) combinations. Anything outside this set is
1567
- # rejected with a structured VALIDATION_INVALID_PARAMETER error.
1568
- _VALID_COMBOS: set[tuple[str, str]] = {
1569
- ("snapshot", "create"),
1570
- ("snapshot", "list"),
1571
- ("snapshot", "restore"),
1572
- ("snapshot", "delete"),
1573
- ("edits", "create"),
1574
- ("edits", "list"),
1575
- ("edits", "view"),
1576
- ("edits", "diff"),
1577
- ("edits", "restore"),
1578
- ("edits", "delete"),
1579
- }
1580
-
1581
-
1582
- def _gate_combo(scope: str, action: str) -> None:
1583
- """Reject (scope, action) combinations that do not exist.
1584
-
1585
- Strong gating defends against the LLM accidentally routing "restore
1586
- my automation" through ``(snapshot, restore)`` (which would restart
1587
- HA). The error response lists every legal combo so the LLM can
1588
- self-correct on the next call.
1589
- """
1590
- if (scope, action) in _VALID_COMBOS:
1591
- return
1592
- raise_tool_error(
1593
- create_error_response(
1594
- ErrorCode.VALIDATION_INVALID_PARAMETER,
1595
- f"Invalid combination: scope={scope!r}, action={action!r}",
1596
- context={"scope": scope, "action": action},
1597
- suggestions=[
1598
- "Valid combinations: "
1599
- + ", ".join(sorted(f"({s},{a})" for s, a in _VALID_COMBOS)),
1600
- "scope='snapshot' is for full HA tarball backups (heavy, restart on restore)",
1601
- "scope='edits' is for per-entity auto-backups produced by write tools (lightweight)",
1602
- ],
1603
- )
1604
- )
1605
-
1606
-
1607
- def _require(param_name: str, value: Any, scope: str, action: str) -> Any:
1608
- """Validate a required parameter for the picked (scope, action) cell."""
1609
- if value is None or (isinstance(value, str) and not value.strip()):
1610
- raise_tool_error(
1611
- create_error_response(
1612
- ErrorCode.VALIDATION_INVALID_PARAMETER,
1613
- f"{param_name!r} is required for scope={scope!r}, action={action!r}",
1614
- context={"scope": scope, "action": action, "missing_param": param_name},
1615
- )
1616
- )
1617
- return value
1618
-
1619
-
1620
1575
  def register_backup_tools(
1621
1576
  mcp: "FastMCP", client: HomeAssistantClient, **kwargs: Any
1622
1577
  ) -> None:
@@ -1659,6 +1614,8 @@ refused if: the target is a scheduled/automatic backup; it's younger than
1659
1614
  newest snapshot remaining. These guarantee at least one recovery point always
1660
1615
  survives an agent's own mistakes.
1661
1616
 
1617
+ **Human-managed backup controls:** `enable_snapshot_actions=false` (ENABLE_SNAPSHOT_ACTIONS) blocks every snapshot action, including listing. `backup_read_only=true` (BACKUP_READ_ONLY) allows edits list/view/diff and snapshot list when snapshots are enabled; it blocks explicit create/restore/delete in both scopes. Automatic pre-edit capture still follows `enable_auto_backup`. A human must change these controls in the Backups tab, app configuration, or environment; developer tools cannot change them. Global and connection Read Only Mode still restrict writes.
1618
+
1662
1619
  **`enable_auto_backup` and `scope="edits"`:** the automatic-on-write capture (every wrapped tool call) is gated by `enable_auto_backup=true` — if the listing is empty, check the toggle (web settings UI or `ENABLE_AUTO_BACKUP=true` env var). The explicit `(edits, create)` action bypasses the toggle since the request is explicit; `list` / `view` / `restore` / `delete` operate on whatever's already on disk regardless of the toggle's current state.
1663
1620
 
1664
1621
  **Template filters:** `edits.create` accepts a Template entity ID and returns its stable config-entry ID as `entity_id`. Use that returned ID for `edits.list` and bulk `edits.delete`; those filters do not resolve entity aliases. After recreation, the restore result reports the replacement config-entry ID and `entity_id_mapping` separately.
@@ -1776,6 +1733,8 @@ survives an agent's own mistakes.
1776
1733
  ) -> dict[str, Any]:
1777
1734
  """Polymorphic backup tool. See the tool description for the routing matrix."""
1778
1735
  _gate_combo(scope, action)
1736
+ settings = get_global_settings()
1737
+ require_backup_access(settings, scope, action)
1779
1738
 
1780
1739
  if scope == "snapshot":
1781
1740
  return await _dispatch_snapshot_action(
@@ -1791,7 +1750,6 @@ survives an agent's own mistakes.
1791
1750
  )
1792
1751
 
1793
1752
  # scope == "edits"
1794
- settings = get_global_settings()
1795
1753
  mgr = get_backup_manager(client, settings)
1796
1754
  return await _dispatch_edits_action(
1797
1755
  mgr,