ha-mcp-dev 9.0.0.dev3198__tar.gz → 9.0.0.dev3202__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 (811) hide show
  1. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/PKG-INFO +1 -1
  2. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/pyproject.toml +1 -1
  3. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/pyproject.toml.orig +1 -1
  4. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/settings_ui/locales/en.json +1 -1
  5. ha_mcp_dev-9.0.0.dev3202/src/ha_mcp/tools/config_file_visibility.py +53 -0
  6. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/tools_config_automations.py +2 -28
  7. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/tools_config_scripts.py +4 -31
  8. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/tools_filesystem.py +5 -5
  9. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/tools_yaml_read.py +4 -0
  10. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/util_helpers.py +37 -0
  11. ha_mcp_dev-9.0.0.dev3202/src/ha_mcp/visibility/config_files.py +103 -0
  12. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/visibility/enforcement.py +99 -25
  13. ha_mcp_dev-9.0.0.dev3202/src/ha_mcp/visibility/identifier_aliases.py +207 -0
  14. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/LICENSE +0 -0
  15. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/README.md +0 -0
  16. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/__init__.py +0 -0
  17. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/__main__.py +0 -0
  18. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_pypi_marker +0 -0
  19. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_rich_compat.py +0 -0
  20. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/__init__.py +0 -0
  21. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
  22. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
  23. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
  24. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
  25. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
  26. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
  27. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
  28. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
  29. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
  30. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
  31. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
  32. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
  33. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
  34. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
  35. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
  36. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
  37. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
  38. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
  39. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
  40. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev_security.py +0 -0
  41. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
  42. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
  43. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
  44. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
  45. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
  46. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
  47. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
  48. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
  49. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
  50. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
  51. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
  52. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
  53. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
  54. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
  55. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
  56. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
  57. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
  58. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
  59. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
  60. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
  61. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
  62. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
  63. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
  64. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
  65. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
  66. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
  67. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
  68. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
  69. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
  70. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
  71. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
  72. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
  73. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
  74. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
  75. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
  76. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
  77. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
  78. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
  79. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
  80. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
  81. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
  82. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/client/mixins/skills.py +0 -0
  83. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
  84. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
  85. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
  86. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
  87. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
  88. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
  89. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
  90. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
  91. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
  92. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
  93. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
  94. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
  95. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
  96. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
  97. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
  98. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
  99. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
  100. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
  101. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
  102. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
  103. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
  104. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
  105. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
  106. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
  107. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
  108. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
  109. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
  110. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
  111. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
  112. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
  113. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
  114. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
  115. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
  116. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
  117. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
  118. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
  119. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
  120. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/jev_search.py +0 -0
  121. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
  122. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
  123. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
  124. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
  125. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
  126. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
  127. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
  128. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
  129. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
  130. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
  131. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
  132. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
  133. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
  134. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
  135. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
  136. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
  137. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
  138. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
  139. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
  140. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
  141. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
  142. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
  143. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
  144. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
  145. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
  146. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
  147. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
  148. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
  149. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
  150. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
  151. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
  152. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
  153. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
  154. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
  155. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
  156. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
  157. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
  158. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
  159. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
  160. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
  161. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
  162. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
  163. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
  164. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
  165. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
  166. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
  167. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
  168. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
  169. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
  170. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
  171. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
  172. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
  173. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
  174. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
  175. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
  176. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
  177. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
  178. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
  179. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
  180. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
  181. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
  182. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
  183. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
  184. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
  185. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
  186. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
  187. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
  188. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
  189. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
  190. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
  191. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
  192. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
  193. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/mixins/extensions.py +0 -0
  194. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
  195. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
  196. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
  197. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
  198. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
  199. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
  200. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
  201. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
  202. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
  203. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
  204. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
  205. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
  206. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
  207. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
  208. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
  209. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
  210. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
  211. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
  212. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
  213. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
  214. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
  215. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
  216. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
  217. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
  218. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
  219. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
  220. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
  221. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
  222. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
  223. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
  224. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
  225. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
  226. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
  227. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
  228. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
  229. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
  230. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
  231. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
  232. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
  233. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
  234. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
  235. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
  236. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
  237. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
  238. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
  239. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
  240. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
  241. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
  242. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/skills/__init__.py +0 -0
  243. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/skills/_constants.py +0 -0
  244. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/skills/_resources.py +0 -0
  245. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/skills/_snapshot.py +0 -0
  246. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/skills/_source.py +0 -0
  247. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/skills/client.py +0 -0
  248. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/skills/extension.py +0 -0
  249. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/skills/models.py +0 -0
  250. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
  251. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
  252. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
  253. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
  254. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
  255. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
  256. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
  257. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
  258. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
  259. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
  260. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
  261. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
  262. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
  263. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
  264. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
  265. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
  266. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
  267. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
  268. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
  269. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
  270. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
  271. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
  272. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
  273. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
  274. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
  275. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
  276. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
  277. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
  278. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
  279. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
  280. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
  281. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
  282. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
  283. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
  284. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
  285. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
  286. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
  287. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
  288. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
  289. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
  290. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
  291. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
  292. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
  293. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
  294. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
  295. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
  296. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
  297. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
  298. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
  299. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
  300. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
  301. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
  302. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
  303. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
  304. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
  305. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
  306. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
  307. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
  308. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
  309. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
  310. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
  311. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
  312. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
  313. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
  314. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
  315. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
  316. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
  317. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
  318. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
  319. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
  320. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
  321. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
  322. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
  323. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
  324. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
  325. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
  326. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
  327. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
  328. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
  329. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
  330. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
  331. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
  332. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
  333. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
  334. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
  335. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
  336. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
  337. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
  338. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
  339. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
  340. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
  341. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
  342. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
  343. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
  344. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
  345. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
  346. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
  347. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
  348. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
  349. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
  350. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
  351. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
  352. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
  353. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
  354. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
  355. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
  356. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
  357. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
  358. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
  359. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
  360. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
  361. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
  362. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
  363. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
  364. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
  365. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
  366. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
  367. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
  368. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
  369. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
  370. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
  371. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
  372. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
  373. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
  374. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
  375. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
  376. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
  377. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
  378. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
  379. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
  380. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
  381. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
  382. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
  383. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
  384. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
  385. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
  386. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
  387. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
  388. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
  389. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
  390. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
  391. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
  392. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
  393. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
  394. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
  395. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
  396. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
  397. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
  398. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
  399. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
  400. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
  401. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
  402. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
  403. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
  404. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
  405. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
  406. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
  407. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/shared/_request_clock.py +0 -0
  408. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
  409. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
  410. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
  411. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
  412. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
  413. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
  414. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
  415. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
  416. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
  417. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
  418. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
  419. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
  420. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
  421. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
  422. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
  423. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
  424. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
  425. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
  426. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
  427. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
  428. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
  429. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
  430. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
  431. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
  432. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
  433. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
  434. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
  435. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
  436. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
  437. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
  438. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
  439. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
  440. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
  441. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
  442. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
  443. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
  444. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/requirements.txt +0 -0
  445. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
  446. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
  447. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
  448. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
  449. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
  450. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
  451. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
  452. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
  453. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
  454. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
  455. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
  456. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
  457. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
  458. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/client.py +0 -0
  459. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
  460. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
  461. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
  462. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
  463. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
  464. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
  465. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
  466. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
  467. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
  468. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
  469. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
  470. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
  471. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
  472. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
  473. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
  474. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
  475. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
  476. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
  477. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
  478. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
  479. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
  480. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
  481. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/server.py +0 -0
  482. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
  483. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
  484. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
  485. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
  486. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
  487. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
  488. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
  489. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
  490. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
  491. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
  492. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
  493. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
  494. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
  495. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
  496. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
  497. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
  498. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
  499. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
  500. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_vendor/websockets/version.py +0 -0
  501. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/_version.py +0 -0
  502. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/app_discovery.py +0 -0
  503. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/auth/__init__.py +0 -0
  504. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/auth/consent_form.py +0 -0
  505. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/auth/iss_stamp.py +0 -0
  506. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/auth/oidc_compat.py +0 -0
  507. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/auth/provider.py +0 -0
  508. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/backup_dashboards.py +0 -0
  509. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/backup_diff.py +0 -0
  510. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/backup_entity_ids.py +0 -0
  511. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/backup_helper_target.py +0 -0
  512. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/backup_integrations.py +0 -0
  513. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/backup_manager.py +0 -0
  514. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/backup_tags.py +0 -0
  515. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/backup_zones.py +0 -0
  516. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/browser_landing.py +0 -0
  517. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/client/__init__.py +0 -0
  518. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/client/admin_routes.py +0 -0
  519. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/client/error_log_journald.py +0 -0
  520. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/client/models.py +0 -0
  521. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/client/rest_client.py +0 -0
  522. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/client/supervisor_client.py +0 -0
  523. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/client/websocket_client.py +0 -0
  524. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/client/websocket_listener.py +0 -0
  525. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/config.py +0 -0
  526. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/config_backup.py +0 -0
  527. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/config_meta.py +0 -0
  528. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/config_overrides.py +0 -0
  529. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/config_registry.py +0 -0
  530. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/config_settings.py +0 -0
  531. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
  532. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
  533. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
  534. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
  535. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
  536. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
  537. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/errors.py +0 -0
  538. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/ha_request_queue.py +0 -0
  539. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/hacs_auto_refresh.py +0 -0
  540. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/http_transport.py +0 -0
  541. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/image_info.py +0 -0
  542. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/llm_exposure.py +0 -0
  543. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/log_filters.py +0 -0
  544. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/policy/__init__.py +0 -0
  545. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/policy/approval_queue.py +0 -0
  546. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/policy/decision_pin.py +0 -0
  547. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/policy/decisions.py +0 -0
  548. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/policy/editing.py +0 -0
  549. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/policy/evaluator.py +0 -0
  550. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/policy/events.py +0 -0
  551. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/policy/handlers.py +0 -0
  552. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/policy/middleware.py +0 -0
  553. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/policy/model.py +0 -0
  554. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/policy/mrtr.py +0 -0
  555. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/policy/persistence.py +0 -0
  556. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/policy/server_channels.py +0 -0
  557. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/policy/value_sources.py +0 -0
  558. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/py.typed +0 -0
  559. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/read_only.py +0 -0
  560. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/redaction.py +0 -0
  561. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/renamed_tools.py +0 -0
  562. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  563. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  564. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
  565. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-actions.md +0 -0
  566. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
  567. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
  568. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  569. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  570. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  571. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  572. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  573. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  574. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  575. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
  576. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  577. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/triggers-and-conditions.md +0 -0
  578. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
  579. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/server.py +0 -0
  580. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/server_instructions.py +0 -0
  581. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/server_lifespan.py +0 -0
  582. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/server_tool_text.py +0 -0
  583. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/settings_ui/__init__.py +0 -0
  584. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
  585. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
  586. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
  587. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/settings_ui/_handlers_oauth_callbacks.py +0 -0
  588. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
  589. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
  590. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
  591. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/settings_ui/_i18n.py +0 -0
  592. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
  593. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/settings_ui/_persistence.py +0 -0
  594. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
  595. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/settings_ui/_theme.py +0 -0
  596. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
  597. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/settings_ui/locales/README.md +0 -0
  598. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/settings_ui/locales/az.json +0 -0
  599. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
  600. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/settings_ui/locales/de.json +0 -0
  601. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
  602. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/settings_ui/locales/es.json +0 -0
  603. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
  604. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/settings_ui/locales/it.json +0 -0
  605. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
  606. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
  607. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
  608. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
  609. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
  610. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
  611. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
  612. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
  613. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/settings_ui/settings.css +0 -0
  614. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/settings_ui/settings.html +0 -0
  615. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/settings_ui/settings_js/01_i18n_state.js +0 -0
  616. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/settings_ui/settings_js/02_tools_restart.js +0 -0
  617. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/settings_ui/settings_js/03_render_save.js +0 -0
  618. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/settings_ui/settings_js/04_backups.js +0 -0
  619. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/settings_ui/settings_js/05_feature_flags.js +0 -0
  620. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/settings_ui/settings_js/06_policy_cards.js +0 -0
  621. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/settings_ui/settings_js/07_policy_actions.js +0 -0
  622. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/settings_ui/settings_js/08_advanced.js +0 -0
  623. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/settings_ui/settings_js/09_prefs_visibility.js +0 -0
  624. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/settings_ui/settings_js/10_oauth_callbacks.js +0 -0
  625. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/smoke_test.py +0 -0
  626. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  627. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/strict_bps.py +0 -0
  628. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tool_dispatch.py +0 -0
  629. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/__init__.py +0 -0
  630. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/addon_connection_hints.py +0 -0
  631. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/area_messages.py +0 -0
  632. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/auto_backup.py +0 -0
  633. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/backup.py +0 -0
  634. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/backup_access.py +0 -0
  635. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/backup_on_demand.py +0 -0
  636. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  637. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/best_practice_result.py +0 -0
  638. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/best_practice_variables.py +0 -0
  639. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/blueprint_sources.py +0 -0
  640. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
  641. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/blueprint_write.py +0 -0
  642. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/bug_report_config.py +0 -0
  643. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/bug_report_templates.py +0 -0
  644. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/bulk_selector.py +0 -0
  645. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/coercion.py +0 -0
  646. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/component_api.py +0 -0
  647. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/component_config_entries.py +0 -0
  648. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/component_config_reads.py +0 -0
  649. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
  650. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/component_devices.py +0 -0
  651. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/component_helper_collections.py +0 -0
  652. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/component_registries.py +0 -0
  653. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
  654. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/config_entry_backup.py +0 -0
  655. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/config_entry_flow.py +0 -0
  656. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
  657. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/config_entry_flow_introspect.py +0 -0
  658. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
  659. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
  660. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/config_entry_identity.py +0 -0
  661. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
  662. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
  663. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/config_helpers/__init__.py +0 -0
  664. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/config_helpers/core_payload.py +0 -0
  665. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/config_helpers/create.py +0 -0
  666. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/config_helpers/describe.py +0 -0
  667. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/config_helpers/flow.py +0 -0
  668. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/config_helpers/icon_route.py +0 -0
  669. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/config_helpers/listing.py +0 -0
  670. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/config_helpers/registry.py +0 -0
  671. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/config_helpers/schemas.py +0 -0
  672. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/config_helpers/typed_config.py +0 -0
  673. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/config_helpers/update.py +0 -0
  674. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/config_helpers/validation.py +0 -0
  675. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/config_subentry_restore.py +0 -0
  676. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/config_write_errors.py +0 -0
  677. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/config_write_helpers.py +0 -0
  678. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/core_contract.py +0 -0
  679. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/dashboard_card_describe.py +0 -0
  680. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
  681. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/dashboard_list_checks.py +0 -0
  682. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/dev_backup.py +0 -0
  683. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/device_control.py +0 -0
  684. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/device_enrichment.py +0 -0
  685. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/diagnostics_helpers.py +0 -0
  686. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/energy_preferences.py +0 -0
  687. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/entity_param_parsing.py +0 -0
  688. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/entity_registration.py +0 -0
  689. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/entity_removal.py +0 -0
  690. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/entity_update_fields.py +0 -0
  691. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/error_log_parsing.py +0 -0
  692. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/flow_helper_lookup.py +0 -0
  693. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/hacs_registration.py +0 -0
  694. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/helper_flows.py +0 -0
  695. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/helpers.py +0 -0
  696. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/history_response.py +0 -0
  697. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/integration_entry_state.py +0 -0
  698. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
  699. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/log_common.py +0 -0
  700. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/log_sources.py +0 -0
  701. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/log_sources_fault.py +0 -0
  702. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/log_sources_logbook.py +0 -0
  703. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
  704. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/radio/__init__.py +0 -0
  705. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/radio/base.py +0 -0
  706. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/radio/matter.py +0 -0
  707. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/radio/thread.py +0 -0
  708. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/radio/zigbee.py +0 -0
  709. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/radio/zwave.py +0 -0
  710. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/radio/zwave_parameters.py +0 -0
  711. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/recorder_errors.py +0 -0
  712. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/reference_validator.py +0 -0
  713. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/registry.py +0 -0
  714. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
  715. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/response_helpers.py +0 -0
  716. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/scene_discovery.py +0 -0
  717. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/search/__init__.py +0 -0
  718. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/search/base.py +0 -0
  719. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/search/component.py +0 -0
  720. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/search/entities.py +0 -0
  721. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/search/legacy.py +0 -0
  722. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/search/modes.py +0 -0
  723. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/search/overview.py +0 -0
  724. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/search/response.py +0 -0
  725. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/search/state.py +0 -0
  726. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/server_version.py +0 -0
  727. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  728. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  729. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  730. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
  731. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  732. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  733. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
  734. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  735. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  736. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  737. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/statistics_calendar.py +0 -0
  738. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/statistics_helpers.py +0 -0
  739. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/statistics_resets.py +0 -0
  740. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/system_restart.py +0 -0
  741. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/tool_hints.py +0 -0
  742. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
  743. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/tools_addons.py +0 -0
  744. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/tools_areas.py +0 -0
  745. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
  746. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  747. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  748. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/tools_calendar.py +0 -0
  749. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/tools_camera.py +0 -0
  750. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/tools_categories.py +0 -0
  751. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/tools_code.py +0 -0
  752. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
  753. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  754. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
  755. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
  756. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/tools_dev.py +0 -0
  757. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/tools_energy.py +0 -0
  758. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/tools_entities.py +0 -0
  759. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/tools_groups.py +0 -0
  760. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/tools_hacs.py +0 -0
  761. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/tools_history.py +0 -0
  762. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/tools_integrations.py +0 -0
  763. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/tools_labels.py +0 -0
  764. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/tools_logs.py +0 -0
  765. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/tools_radio.py +0 -0
  766. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/tools_registry.py +0 -0
  767. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/tools_resources.py +0 -0
  768. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/tools_search.py +0 -0
  769. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/tools_security_policy.py +0 -0
  770. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/tools_service.py +0 -0
  771. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/tools_services.py +0 -0
  772. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/tools_system.py +0 -0
  773. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/tools_themes.py +0 -0
  774. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/tools_todo.py +0 -0
  775. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/tools_traces.py +0 -0
  776. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/tools_updates.py +0 -0
  777. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/tools_utility.py +0 -0
  778. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  779. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  780. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/tools_zones.py +0 -0
  781. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/validation_middleware.py +0 -0
  782. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/tools/ws_waiters.py +0 -0
  783. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/transforms/__init__.py +0 -0
  784. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/transforms/categorized_search.py +0 -0
  785. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/transforms/compact_params.py +0 -0
  786. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/transforms/component_helpers.py +0 -0
  787. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/transforms/component_search.py +0 -0
  788. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  789. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/transforms/write_tool_note.py +0 -0
  790. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/transport_security.py +0 -0
  791. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/update_check.py +0 -0
  792. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/utils/__init__.py +0 -0
  793. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/utils/config_hash.py +0 -0
  794. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/utils/config_write_lock.py +0 -0
  795. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/utils/dashboard_patch.py +0 -0
  796. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/utils/data_paths.py +0 -0
  797. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
  798. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/utils/domain_handlers.py +0 -0
  799. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/utils/entity_membership.py +0 -0
  800. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  801. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  802. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/utils/mcp_client_host.py +0 -0
  803. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/utils/operation_manager.py +0 -0
  804. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/utils/python_sandbox.py +0 -0
  805. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/utils/registry_update_lock.py +0 -0
  806. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/utils/skill_loader.py +0 -0
  807. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/utils/usage_logger.py +0 -0
  808. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/visibility/__init__.py +0 -0
  809. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/visibility/model.py +0 -0
  810. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/visibility/persistence.py +0 -0
  811. {ha_mcp_dev-9.0.0.dev3198 → ha_mcp_dev-9.0.0.dev3202}/src/ha_mcp/visibility/resolver.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ha-mcp-dev
3
- Version: 9.0.0.dev3198
3
+ Version: 9.0.0.dev3202
4
4
  Summary: Home Assistant MCP Server - Complete control of Home Assistant through MCP
5
5
  Keywords: mcp,home-assistant,ai,automation,smart-home
6
6
  Author: Julien
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "9.0.0.dev3198"
7
+ version = "9.0.0.dev3202"
8
8
  description = "Home Assistant MCP Server - Complete control of Home Assistant through MCP"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13,<3.15"
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "9.0.0.dev3198"
7
+ version = "9.0.0.dev3202"
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
@@ -103,7 +103,7 @@
103
103
  "visibility.boundary": "Without enforce mode (below), this is noise reduction, not access control: a hidden entity is still returned by a direct read of its entity_id and still appears in automation, dashboard, and template content. Do not rely on the filter alone as a security boundary.",
104
104
  "visibility.enabled": "Enable entity visibility filter",
105
105
  "visibility.enforce.title": "Enforce mode",
106
- "visibility.enforce.help": "Extends the filter from decluttering search and overview to every tool read except ha_report_issue by default. A direct read of a hidden entity returns “not found”, and a content read that would surface one is refused. The report-tool exception is controlled below. Best-effort concealment against incidental exposure, not a hardened security boundary.",
106
+ "visibility.enforce.help": "Extends the filter from decluttering search and overview to every tool read except ha_report_issue by default. A direct read of a hidden entity returns “not found”, and a content read that would surface one is refused. The report-tool exception is controlled below. Best-effort concealment against incidental exposure, not a hardened security boundary. It can also refuse more than needed: a read that only shares a hidden script, scene or automation’s key or ID may be refused too.",
107
107
  "visibility.enforce.only_enforced": "Make hidden entities unreadable across tool reads (except issue reports by default)",
108
108
  "visibility.enforce.report_issue_help": "While this is off, ha_report_issue and all of its diagnostic output—including logs—stay outside enforce mode on every call, even when visibility data is healthy or unavailable. Turn it on to scan and refuse that tool like other reads.",
109
109
  "visibility.enforce.restrict_report_issue": "Apply enforce mode to ha_report_issue",
@@ -0,0 +1,53 @@
1
+ """Enforce-mode guard for config-file reads (``ha_read_file``, ``ha_config_get_yaml``).
2
+
3
+ The component's ``read_file`` service applies ``tail_lines`` and ``yaml_path``
4
+ itself, and a slice can start anywhere inside a hidden block, so the decision is
5
+ made on the whole file: while enforce mode hides a script, scene or automation,
6
+ each YAML target is read in full first and the call is refused when that file
7
+ defines a hidden item. That costs one extra read per file, only in enforce mode.
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ import asyncio
13
+ from collections.abc import Iterable
14
+ from typing import Any
15
+
16
+ from ..visibility.config_files import defines_hidden_item, is_yaml_path
17
+ from .tools_filesystem import call_mcp_tools_service
18
+ from .util_helpers import unwrap_service_response
19
+
20
+
21
+ async def refuse_reading_hidden_definitions(
22
+ client: Any, tool_name: str, paths: Iterable[str]
23
+ ) -> None:
24
+ """Refuse the call when any YAML file in ``paths`` defines a hidden item.
25
+
26
+ A file the full read cannot return is left to the real read, which reports
27
+ the same failure. A transport error propagates rather than letting the
28
+ sliced read run unchecked.
29
+ """
30
+ from ..visibility.enforcement import (
31
+ active_identifier_aliases,
32
+ refuse_hidden_config_file,
33
+ )
34
+
35
+ aliases = await active_identifier_aliases(client)
36
+ if aliases is None or not (aliases.script_services or aliases.storage_keys):
37
+ return
38
+ targets = [path for path in paths if is_yaml_path(path)]
39
+ responses = await asyncio.gather(
40
+ *(
41
+ call_mcp_tools_service(client, "read_file", {"path": path})
42
+ for path in targets
43
+ )
44
+ )
45
+ for path, response in zip(targets, responses, strict=True):
46
+ body = unwrap_service_response(response) if isinstance(response, dict) else {}
47
+ content = body.get("content")
48
+ # Off the event loop: the embedded server shares Home Assistant's loop,
49
+ # and a large file's pure-Python parse would stall it.
50
+ if isinstance(content, str) and await asyncio.to_thread(
51
+ defines_hidden_item, path, content, aliases
52
+ ):
53
+ refuse_hidden_config_file(tool_name)
@@ -70,6 +70,7 @@ from .helpers import (
70
70
  )
71
71
  from .reference_validator import validate_config_references
72
72
  from .tool_hints import read_only_hints, write_hints
73
+ from .util_helpers import list_visible_registry_ids
73
74
  from .ws_waiters import (
74
75
  verify_entity_removed,
75
76
  wait_for_automation_entity_by_unique_id,
@@ -1596,33 +1597,6 @@ class AutomationConfigTools:
1596
1597
  )
1597
1598
  return response
1598
1599
 
1599
- async def _list_automation_entity_ids(self) -> list[str]:
1600
- """Best-effort list of automation entity_ids (up to 10) from the entity registry.
1601
-
1602
- Used to populate ``available_automation_ids`` in RESOURCE_NOT_FOUND
1603
- error context. Returns an empty list on any failure — caller treats
1604
- absence as "no IDs to report" rather than failing the structured
1605
- error raise. The 10-entry cap lives here (not at the callers) so a
1606
- new call site can't accidentally bloat the error payload.
1607
- """
1608
- try:
1609
- result = await self._client.send_websocket_message(
1610
- {"type": "config/entity_registry/list"}
1611
- )
1612
- except Exception as e: # noqa: BLE001
1613
- logger.debug("Failed to list automation entity_ids from registry: %s", e)
1614
- return []
1615
- entries = result.get("result", []) if isinstance(result, dict) else result
1616
- if not isinstance(entries, list):
1617
- return []
1618
- return [
1619
- entry["entity_id"]
1620
- for entry in entries
1621
- if isinstance(entry, dict)
1622
- and isinstance(entry.get("entity_id"), str)
1623
- and entry["entity_id"].startswith("automation.")
1624
- ][:10]
1625
-
1626
1600
  async def _guard_alias_replacement(
1627
1601
  self, identifier: str, config: dict[str, Any]
1628
1602
  ) -> str | None:
@@ -1670,7 +1644,7 @@ class AutomationConfigTools:
1670
1644
  ``ha_config_remove_automation``). Populates
1671
1645
  ``available_automation_ids`` (up to 10) from the entity registry.
1672
1646
  """
1673
- available_ids = await self._list_automation_entity_ids()
1647
+ available_ids = await list_visible_registry_ids(self._client, "automation")
1674
1648
  raise_tool_error(
1675
1649
  create_error_response(
1676
1650
  ErrorCode.RESOURCE_NOT_FOUND,
@@ -60,6 +60,7 @@ from .helpers import (
60
60
  )
61
61
  from .reference_validator import validate_config_references
62
62
  from .tool_hints import read_only_hints, write_hints
63
+ from .util_helpers import list_visible_registry_ids
63
64
  from .ws_waiters import verify_entity_removed, wait_for_entity_registered
64
65
 
65
66
  logger = logging.getLogger(__name__)
@@ -254,36 +255,6 @@ class ConfigScriptTools:
254
255
  response.setdefault("warnings", []).extend(cat_warnings)
255
256
  return response
256
257
 
257
- async def _list_script_entity_ids(self) -> list[str]:
258
- """Best-effort list of bare script IDs (up to 10) from the entity registry.
259
-
260
- Returns the bare storage keys (e.g. ``morning_routine``), stripping
261
- the ``script.`` entity_id prefix — ``ha_config_get_script`` /
262
- ``ha_config_set_script`` / ``ha_config_remove_script`` all take the
263
- bare form, so the entity_id prefix would force callers to strip it
264
- before retry. Returns an empty list on any failure — caller treats
265
- absence as "no IDs to report" rather than failing the structured
266
- error raise. The 10-entry cap lives here (not at the callers) so a
267
- new call site can't accidentally bloat the error payload.
268
- """
269
- try:
270
- result = await self._client.send_websocket_message(
271
- {"type": "config/entity_registry/list"}
272
- )
273
- except Exception as e: # noqa: BLE001
274
- logger.debug("Failed to list script entity_ids from registry: %s", e)
275
- return []
276
- entries = result.get("result", []) if isinstance(result, dict) else result
277
- if not isinstance(entries, list):
278
- return []
279
- return [
280
- entry["entity_id"][len("script.") :]
281
- for entry in entries
282
- if isinstance(entry, dict)
283
- and isinstance(entry.get("entity_id"), str)
284
- and entry["entity_id"].startswith("script.")
285
- ][:10]
286
-
287
258
  async def _raise_script_not_found(self, script_id: str) -> None:
288
259
  """Raise a structured RESOURCE_NOT_FOUND ToolError for a missing script.
289
260
 
@@ -293,7 +264,9 @@ class ConfigScriptTools:
293
264
  ``ha_config_remove_script``). Populates ``available_script_ids``
294
265
  (up to 10 bare IDs) from the entity registry.
295
266
  """
296
- available_ids = await self._list_script_entity_ids()
267
+ available_ids = await list_visible_registry_ids(
268
+ self._client, "script", bare=True
269
+ )
297
270
  raise_tool_error(
298
271
  create_error_response(
299
272
  ErrorCode.RESOURCE_NOT_FOUND,
@@ -702,17 +702,17 @@ class FilesystemTools:
702
702
  EXAMPLE: ha_read_file(path="packages/alert2.yaml", yaml_path="alert2")
703
703
  """
704
704
  try:
705
- # Check if custom component is available
706
- await _assert_mcp_tools_available(self._client)
705
+ from .config_file_visibility import refuse_reading_hidden_definitions
707
706
 
708
- # Build service data
707
+ await _assert_mcp_tools_available(self._client)
708
+ await refuse_reading_hidden_definitions(
709
+ self._client, "ha_read_file", [path]
710
+ )
709
711
  service_data: dict[str, Any] = {"path": path}
710
712
  if tail_lines is not None:
711
713
  service_data["tail_lines"] = tail_lines
712
714
  if yaml_path is not None:
713
715
  service_data["yaml_path"] = yaml_path
714
-
715
- # Call the custom component service
716
716
  result = await call_mcp_tools_service(
717
717
  self._client,
718
718
  "read_file",
@@ -27,6 +27,7 @@ from ha_mcp._vendor.fastmcp.exceptions import ToolError
27
27
  from ha_mcp._vendor.fastmcp.tools import tool
28
28
 
29
29
  from ..errors import ErrorCode, create_error_response
30
+ from .config_file_visibility import refuse_reading_hidden_definitions
30
31
  from .helpers import (
31
32
  exception_to_structured_error,
32
33
  log_tool_usage,
@@ -441,6 +442,9 @@ class YamlReadTools:
441
442
  # Strictness is a property of each target, not of the request, so
442
443
  # the resolver reports which targets were named rather than expanded.
443
444
  targets, resolve_warnings = await _resolve_target_files(self._client, file)
445
+ await refuse_reading_hidden_definitions(
446
+ self._client, "ha_config_get_yaml", [target for target, _ in targets]
447
+ )
444
448
 
445
449
  extra: dict[str, Any] = {"include_parsed": True} if include_parsed else {}
446
450
  # The reads are independent, so fan them out rather than paying N
@@ -335,3 +335,40 @@ def is_connection_error_message(error_msg: Any) -> bool:
335
335
  """
336
336
  lowered = str(error_msg).lower()
337
337
  return any(sig in lowered for sig in WS_CONNECTION_SIGNATURES)
338
+
339
+
340
+ async def list_visible_registry_ids(
341
+ client: Any, domain: str, *, bare: bool = False
342
+ ) -> list[str]:
343
+ """Best-effort list of up to 10 visible ``domain`` entity IDs from the registry.
344
+
345
+ Populates the ``available_*_ids`` hint of a RESOURCE_NOT_FOUND error. With
346
+ ``bare`` the ``<domain>.`` prefix is stripped, for tools that take the bare
347
+ storage-key form. Entities hidden by enforce mode are dropped so the hint
348
+ neither leaks a hidden ID nor trips the outbound scan. Returns an empty list
349
+ on any failure: the caller treats absence as "no IDs to report" rather than
350
+ failing the structured error raise. The cap lives here so a new call site
351
+ can't bloat the error payload.
352
+ """
353
+ from ..visibility.enforcement import active_hidden_entity_ids
354
+
355
+ try:
356
+ result = await client.send_websocket_message(
357
+ {"type": "config/entity_registry/list"}
358
+ )
359
+ except Exception as e: # noqa: BLE001
360
+ logger.debug("Failed to list %s entity_ids from registry: %s", domain, e)
361
+ return []
362
+ entries = result.get("result", []) if isinstance(result, dict) else result
363
+ if not isinstance(entries, list):
364
+ return []
365
+ hidden = await active_hidden_entity_ids(client)
366
+ prefix = f"{domain}."
367
+ return [
368
+ entity_id.removeprefix(prefix) if bare else entity_id
369
+ for entry in entries
370
+ if isinstance(entry, dict)
371
+ and isinstance(entity_id := entry.get("entity_id"), str)
372
+ and entity_id.startswith(prefix)
373
+ and entity_id not in hidden
374
+ ][:10]
@@ -0,0 +1,103 @@
1
+ """Hidden script, scene and automation definitions in Home Assistant config files.
2
+
3
+ ``scripts.yaml`` is keyed by storage key and ``scenes.yaml`` / ``automations.yaml``
4
+ list items by config ``id`` (Core's ``SCRIPT_CONFIG_PATH`` / ``SCENE_CONFIG_PATH``
5
+ / ``AUTOMATION_CONFIG_PATH``), and a package or ``configuration.yaml`` defines
6
+ them under a ``script:`` / ``scene:`` / ``automation:`` section. A hidden body in
7
+ such a file never spells out its entity_id, so the entity scan cannot see it.
8
+
9
+ Only those definition positions count: a helper or dashboard key that merely
10
+ shares a hidden script's key is not a definition and stays readable.
11
+ """
12
+
13
+ from __future__ import annotations
14
+
15
+ import posixpath
16
+ import re
17
+ from typing import Any
18
+
19
+ import yaml # type: ignore[import-untyped]
20
+
21
+ from .identifier_aliases import IdentifierAliases
22
+
23
+ _ROOT_FILE_DOMAINS = {
24
+ "scripts.yaml": "script",
25
+ "scenes.yaml": "scene",
26
+ "automations.yaml": "automation",
27
+ }
28
+ # Home Assistant also reads ``<domain> <label>:`` sections (``automation old:``).
29
+ _SECTION_KEY = re.compile(r"^(script|scene|automation)(?: .+)?$")
30
+ _YAML_SUFFIXES = (".yaml", ".yml")
31
+
32
+
33
+ class _TagTolerantLoader(yaml.SafeLoader):
34
+ """SafeLoader that neutralizes HA tags (``!include``, ``!secret``) to None."""
35
+
36
+
37
+ _TagTolerantLoader.add_multi_constructor("!", lambda _loader, _suffix, _node: None)
38
+
39
+
40
+ def is_yaml_path(path: str) -> bool:
41
+ return path.casefold().endswith(_YAML_SUFFIXES)
42
+
43
+
44
+ def defines_hidden_item(path: str, content: str, aliases: IdentifierAliases) -> bool:
45
+ """Whether a config file's full ``content`` defines a hidden item.
46
+
47
+ An unparseable file is judged by whether its text contains a hidden key at
48
+ all, failing closed rather than letting a broken file through unchecked.
49
+ """
50
+ try:
51
+ document = yaml.load(content, Loader=_TagTolerantLoader)
52
+ except yaml.YAMLError:
53
+ return _mentions_hidden_key(content, aliases)
54
+ # The component normalizes the path the same way before reading it, so
55
+ # ``.//scripts.yaml`` and ``www/../scripts.yaml`` are ``scripts.yaml``.
56
+ root_domain = _ROOT_FILE_DOMAINS.get(posixpath.normpath(path.strip()))
57
+ if root_domain is not None and _section_defines_hidden(
58
+ root_domain, document, aliases
59
+ ):
60
+ return True
61
+ return _any_section_defines_hidden(document, aliases)
62
+
63
+
64
+ def _any_section_defines_hidden(value: Any, aliases: IdentifierAliases) -> bool:
65
+ if isinstance(value, dict):
66
+ for key, item in value.items():
67
+ match = _SECTION_KEY.match(key) if isinstance(key, str) else None
68
+ if match and _section_defines_hidden(match.group(1), item, aliases):
69
+ return True
70
+ if _any_section_defines_hidden(item, aliases):
71
+ return True
72
+ elif isinstance(value, list):
73
+ return any(_any_section_defines_hidden(item, aliases) for item in value)
74
+ return False
75
+
76
+
77
+ def _section_defines_hidden(
78
+ domain: str, section: Any, aliases: IdentifierAliases
79
+ ) -> bool:
80
+ if domain == "script":
81
+ return isinstance(section, dict) and any(
82
+ isinstance(key, str) and key.casefold() in aliases.script_services
83
+ for key in section
84
+ )
85
+ items = section if isinstance(section, list) else [section]
86
+ config_ids = aliases.storage_keys.get(domain, frozenset())
87
+ return any(
88
+ isinstance(item, dict)
89
+ and isinstance(item.get("id"), str | int)
90
+ and str(item["id"]) in config_ids
91
+ for item in items
92
+ )
93
+
94
+
95
+ def _mentions_hidden_key(content: str, aliases: IdentifierAliases) -> bool:
96
+ keys = set(aliases.script_services)
97
+ keys |= aliases.storage_keys.get("scene", frozenset())
98
+ keys |= aliases.storage_keys.get("automation", frozenset())
99
+ folded = content.casefold()
100
+ return any(
101
+ re.search(rf"(?<![\w-]){re.escape(key.casefold())}(?![\w-])", folded)
102
+ for key in keys
103
+ )
@@ -55,7 +55,7 @@ import re
55
55
  import time
56
56
  from collections.abc import Callable
57
57
  from contextvars import ContextVar
58
- from dataclasses import dataclass
58
+ from dataclasses import dataclass, field
59
59
  from typing import TYPE_CHECKING, Any, NamedTuple, NoReturn
60
60
 
61
61
  from ha_mcp._vendor.fastmcp.exceptions import ToolError
@@ -70,6 +70,12 @@ from ..renamed_tools import current_tool_name
70
70
  from ..tool_dispatch import CALL_PROXY_META_TOOLS
71
71
  from ..tools.helpers import raise_tool_error
72
72
  from . import resolver
73
+ from .identifier_aliases import (
74
+ IdentifierAliases,
75
+ build_identifier_aliases,
76
+ hidden_identifier_argument,
77
+ result_reveals_hidden,
78
+ )
73
79
  from .model import VisibilityConfig
74
80
  from .resolver import (
75
81
  VisibilityDataUnavailable,
@@ -140,6 +146,10 @@ def _state_content_warning(paths: list[str]) -> str:
140
146
  )
141
147
 
142
148
 
149
+ _CONFIG_FILE_REASON = (
150
+ "The file defines a script, scene or automation restricted by the entity "
151
+ "visibility filter."
152
+ )
143
153
  _CONFIG_LOAD_FAILED_REASON = (
144
154
  "The entity visibility config (entity_visibility.json) could not be loaded and "
145
155
  "no previously loaded config is available, so the server cannot determine "
@@ -248,18 +258,25 @@ def _build_hidden_regex(hidden: set[str]) -> re.Pattern[str] | None:
248
258
 
249
259
  @dataclass(frozen=True)
250
260
  class _HiddenMatcher:
251
- """The enforced hidden set together with the boundary regex compiled from it.
261
+ """The enforced hidden set, its identifier aliases and the boundary regex.
252
262
 
253
- Built only through :meth:`from_hidden`, so ``regex`` is ``None`` exactly when
254
- ``hidden`` is empty and every scan sees a consistent pair.
263
+ ``identifier_aliases`` holds the bare keys that address a hidden script,
264
+ scene or automation (see ``identifier_aliases``). The regex matches the
265
+ hidden entity_ids plus the alias terms that run a hidden script without
266
+ naming it. Built only through :meth:`from_hidden`, so ``regex`` is ``None``
267
+ exactly when ``hidden`` is empty and every scan sees one consistent view.
255
268
  """
256
269
 
257
270
  hidden: frozenset[str]
258
271
  regex: re.Pattern[str] | None
272
+ identifier_aliases: IdentifierAliases = field(hash=False)
259
273
 
260
274
  @classmethod
261
- def from_hidden(cls, hidden: set[str]) -> _HiddenMatcher:
262
- return cls(frozenset(hidden), _build_hidden_regex(hidden))
275
+ def from_hidden(
276
+ cls, hidden: set[str], aliases: IdentifierAliases
277
+ ) -> _HiddenMatcher:
278
+ terms = hidden | aliases.embedded_terms()
279
+ return cls(frozenset(hidden), _build_hidden_regex(terms), aliases)
263
280
 
264
281
  def exact(self, text: str) -> bool:
265
282
  """Whether ``text`` is a hidden entity_id."""
@@ -286,6 +303,22 @@ def _serialize_result(result: ToolResult) -> str:
286
303
  return "\n".join(parts)
287
304
 
288
305
 
306
+ def _result_payloads(result: ToolResult) -> list[Any]:
307
+ """A tool result's structured content and text blocks, JSON-parsed if possible."""
308
+ payloads: list[Any] = []
309
+ structured = getattr(result, "structured_content", None)
310
+ if structured is not None:
311
+ payloads.append(structured)
312
+ for block in getattr(result, "content", None) or []:
313
+ text = getattr(block, "text", None)
314
+ if isinstance(text, str):
315
+ try:
316
+ payloads.append(json.loads(text))
317
+ except json.JSONDecodeError:
318
+ payloads.append(text)
319
+ return payloads
320
+
321
+
289
322
  # Sentinel returned for a hidden-naming string value or a mapping whose
290
323
  # ``entity_id`` is hidden; its enclosing mapping/sequence omits that value. At the
291
324
  # top level it reaches ``_scrub_state_representation``, which treats the
@@ -640,7 +673,7 @@ class _VisibilityEnforcementBase(Middleware):
640
673
  return config
641
674
 
642
675
  async def _hidden_matcher(self, config: VisibilityConfig) -> _HiddenMatcher:
643
- """Resolve the hidden set + regex through the module-shared cache."""
676
+ """Resolve the hidden set, aliases and regex through the module-shared cache."""
644
677
  return await _hidden_cache.get(config, self._get_client())
645
678
 
646
679
 
@@ -687,6 +720,16 @@ class VisibilityInboundEnforcement(_VisibilityEnforcementBase):
687
720
  except VisibilityDataUnavailable:
688
721
  _raise_enforced(effective_name, _FAIL_CLOSED_REASON)
689
722
 
723
+ bare = hidden_identifier_argument(
724
+ effective_name, effective_args, matcher.identifier_aliases
725
+ )
726
+ if bare is not None:
727
+ logger.info(
728
+ "visibility enforce: concealed hidden entity addressed by bare "
729
+ "identifier in %s call",
730
+ effective_name,
731
+ )
732
+ _conceal_as_not_found(bare)
690
733
  self._scan_inbound(effective_name, name, args, matcher)
691
734
  return await call_next(context)
692
735
 
@@ -766,7 +809,9 @@ class VisibilityOutboundEnforcement(_VisibilityEnforcementBase):
766
809
  scrub_tally.unwarnable_representations,
767
810
  )
768
811
  _raise_enforced(name, _outbound_reason(name))
769
- if matcher.embeds(_serialize_result(result)):
812
+ if matcher.embeds(_serialize_result(result)) or result_reveals_hidden(
813
+ _result_payloads(result), matcher.identifier_aliases
814
+ ):
770
815
  logger.info("visibility enforce: refused result from %s", name)
771
816
  _raise_enforced(name, _outbound_reason(name))
772
817
  if scrub_tally.mutated_representations:
@@ -779,7 +824,7 @@ class VisibilityOutboundEnforcement(_VisibilityEnforcementBase):
779
824
  return result
780
825
 
781
826
 
782
- async def _refresh_hidden_set(config: VisibilityConfig, client: Any) -> set[str]:
827
+ async def _refresh_hidden_set(config: VisibilityConfig, client: Any) -> _HiddenMatcher:
783
828
  """Fetch registry/states (+device registry when needed) and resolve strictly.
784
829
 
785
830
  Mirrors the search seam's fetches. Any fetch error, or a strict resolver
@@ -820,7 +865,9 @@ async def _refresh_hidden_set(config: VisibilityConfig, client: Any) -> set[str]
820
865
  hidden, _warnings = await load_hidden_set(
821
866
  fetched[1], fetched[0], client, device_result, strict=True
822
867
  )
823
- return hidden
868
+ return _HiddenMatcher.from_hidden(
869
+ hidden, build_identifier_aliases(hidden, fetched[1])
870
+ )
824
871
 
825
872
 
826
873
  class _HiddenSetCache:
@@ -851,7 +898,7 @@ class _HiddenSetCache:
851
898
  if self._matcher is not None and self._key == key and now < self._expiry:
852
899
  return self._matcher
853
900
  try:
854
- hidden = await _refresh_hidden_set(config, client)
901
+ matcher = await _refresh_hidden_set(config, client)
855
902
  except Exception:
856
903
  if self._matcher is not None and self._key == key:
857
904
  logger.warning(
@@ -866,7 +913,6 @@ class _HiddenSetCache:
866
913
  exc_info=True,
867
914
  )
868
915
  raise VisibilityDataUnavailable("hidden set unavailable") from None
869
- matcher = _HiddenMatcher.from_hidden(hidden)
870
916
  self._matcher = matcher
871
917
  self._key = key
872
918
  self._expiry = now + _CACHE_TTL_SECONDS
@@ -876,18 +922,11 @@ class _HiddenSetCache:
876
922
  _hidden_cache = _HiddenSetCache()
877
923
 
878
924
 
879
- async def active_hidden_regex(client: Any) -> re.Pattern[str] | None:
880
- """Return the hidden-set regex while enforce mode is active, else ``None``.
925
+ async def _active_matcher(client: Any) -> _HiddenMatcher | None:
926
+ """The shared matcher while enforce mode is active; ``None`` otherwise or on error.
881
927
 
882
- Collection-read surfaces (the ha_search config-body branches, legacy and
883
- component) call this to OMIT records referencing a hidden entity before the
884
- response reaches the middleware's outbound scan — which would otherwise
885
- refuse the whole call on contact, turning the issue-#2015 "collection reads
886
- omit" contract into a wholesale refusal. ``client`` is the CALLER's live
887
- client, used only if the shared cache needs a refresh (the middleware's
888
- inbound gate for the request in flight normally primed it already).
889
- Fail-soft to ``None`` on any load/data error: the fail-closed policy is
890
- owned by the middleware's call gates, not by this best-effort scrub seam.
928
+ Fail-soft: the fail-closed policy is owned by the middleware's call gates,
929
+ not by the best-effort tool-side scrubs that call this.
891
930
  """
892
931
  try:
893
932
  config = await asyncio.to_thread(
@@ -899,10 +938,45 @@ async def active_hidden_regex(client: Any) -> re.Pattern[str] | None:
899
938
  and config_has_active_hide_dimensions(config)
900
939
  ):
901
940
  return None
902
- matcher = await _hidden_cache.get(config, client)
941
+ return await _hidden_cache.get(config, client)
903
942
  except Exception: # noqa: BLE001
904
943
  return None
905
- return matcher.regex
944
+
945
+
946
+ async def active_hidden_entity_ids(client: Any) -> frozenset[str]:
947
+ """The enforced hidden entity_ids, empty while enforce mode is inactive.
948
+
949
+ Tools that list entity IDs in a genuine error (``available_script_ids``)
950
+ drop these so the list neither leaks a hidden ID nor trips the outbound scan.
951
+ """
952
+ matcher = await _active_matcher(client)
953
+ return matcher.hidden if matcher is not None else frozenset()
954
+
955
+
956
+ async def active_identifier_aliases(client: Any) -> IdentifierAliases | None:
957
+ """The hidden items' identifier aliases while enforce mode is active."""
958
+ matcher = await _active_matcher(client)
959
+ return matcher.identifier_aliases if matcher is not None else None
960
+
961
+
962
+ def refuse_hidden_config_file(tool_name: str) -> NoReturn:
963
+ """Refuse a config-file read whose file defines a hidden item."""
964
+ _raise_enforced(tool_name, _CONFIG_FILE_REASON)
965
+
966
+
967
+ async def active_hidden_regex(client: Any) -> re.Pattern[str] | None:
968
+ """Return the hidden-set regex while enforce mode is active, else ``None``.
969
+
970
+ Collection-read surfaces (the ha_search config-body branches, legacy and
971
+ component) call this to OMIT records referencing a hidden entity before the
972
+ response reaches the middleware's outbound scan — which would otherwise
973
+ refuse the whole call on contact, turning the issue-#2015 "collection reads
974
+ omit" contract into a wholesale refusal. ``client`` is the CALLER's live
975
+ client, used only if the shared cache needs a refresh (the middleware's
976
+ inbound gate for the request in flight normally primed it already).
977
+ """
978
+ matcher = await _active_matcher(client)
979
+ return matcher.regex if matcher is not None else None
906
980
 
907
981
 
908
982
  def scrub_records(