ha-mcp-dev 8.5.0.dev2693__tar.gz → 8.5.0.dev2696__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 (731) hide show
  1. {ha_mcp_dev-8.5.0.dev2693/src/ha_mcp_dev.egg-info → ha_mcp_dev-8.5.0.dev2696}/PKG-INFO +1 -1
  2. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/pyproject.toml +1 -1
  3. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/backup_manager.py +251 -42
  4. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/config.py +19 -0
  5. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/llm_exposure.py +13 -5
  6. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/server.py +17 -13
  7. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/tools_calendar.py +396 -57
  8. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696/src/ha_mcp_dev.egg-info}/PKG-INFO +1 -1
  9. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/LICENSE +0 -0
  10. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/MANIFEST.in +0 -0
  11. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/README.md +0 -0
  12. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/setup.cfg +0 -0
  13. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/__init__.py +0 -0
  14. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/__main__.py +0 -0
  15. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_pypi_marker +0 -0
  16. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_rich_compat.py +0 -0
  17. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/__init__.py +0 -0
  18. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
  19. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
  20. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
  21. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
  22. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
  23. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
  24. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
  25. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
  26. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
  27. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
  28. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
  29. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
  30. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
  31. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
  32. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
  33. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
  34. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
  35. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
  36. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
  37. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
  38. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
  39. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
  40. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
  41. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
  42. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
  43. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
  44. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
  45. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
  46. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
  47. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
  48. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
  49. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
  50. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
  51. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
  52. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
  53. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
  54. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
  55. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
  56. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
  57. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
  58. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
  59. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
  60. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
  61. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
  62. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
  63. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
  64. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
  65. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
  66. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
  67. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
  68. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
  69. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
  70. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
  71. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
  72. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
  73. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
  74. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
  75. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
  76. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
  77. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
  78. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
  79. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
  80. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
  81. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
  82. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
  83. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
  84. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
  85. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
  86. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
  87. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
  88. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
  89. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
  90. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
  91. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
  92. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
  93. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
  94. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
  95. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
  96. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
  97. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
  98. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
  99. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
  100. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
  101. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
  102. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
  103. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
  104. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
  105. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
  106. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
  107. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
  108. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
  109. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
  110. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
  111. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
  112. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
  113. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
  114. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
  115. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
  116. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
  117. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
  118. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
  119. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
  120. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
  121. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
  122. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
  123. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
  124. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
  125. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
  126. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
  127. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
  128. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
  129. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
  130. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
  131. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
  132. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
  133. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
  134. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
  135. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
  136. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
  137. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
  138. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
  139. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
  140. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
  141. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
  142. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
  143. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
  144. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
  145. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
  146. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
  147. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
  148. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
  149. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
  150. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
  151. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
  152. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
  153. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
  154. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
  155. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
  156. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
  157. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
  158. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
  159. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
  160. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
  161. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
  162. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
  163. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
  164. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
  165. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
  166. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
  167. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
  168. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
  169. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
  170. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
  171. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
  172. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
  173. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
  174. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
  175. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
  176. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
  177. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
  178. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
  179. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
  180. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
  181. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
  182. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
  183. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
  184. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
  185. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
  186. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
  187. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
  188. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
  189. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
  190. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
  191. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
  192. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
  193. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
  194. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
  195. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
  196. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
  197. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
  198. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
  199. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
  200. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
  201. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
  202. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
  203. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
  204. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
  205. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
  206. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
  207. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
  208. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
  209. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
  210. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
  211. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
  212. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
  213. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
  214. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
  215. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
  216. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
  217. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
  218. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
  219. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
  220. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
  221. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
  222. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
  223. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
  224. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
  225. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
  226. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
  227. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
  228. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
  229. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
  230. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
  231. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
  232. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
  233. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
  234. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
  235. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
  236. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
  237. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
  238. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
  239. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
  240. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
  241. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
  242. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
  243. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
  244. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
  245. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
  246. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
  247. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
  248. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
  249. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
  250. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
  251. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
  252. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
  253. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
  254. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
  255. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
  256. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
  257. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
  258. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
  259. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
  260. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
  261. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
  262. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
  263. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
  264. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
  265. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
  266. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
  267. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
  268. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
  269. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
  270. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
  271. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
  272. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
  273. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
  274. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
  275. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
  276. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
  277. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
  278. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
  279. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
  280. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
  281. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
  282. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
  283. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
  284. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
  285. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
  286. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
  287. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
  288. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
  289. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
  290. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
  291. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
  292. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
  293. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
  294. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
  295. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
  296. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
  297. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
  298. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
  299. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
  300. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
  301. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
  302. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
  303. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
  304. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
  305. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
  306. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
  307. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
  308. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
  309. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
  310. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
  311. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
  312. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
  313. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
  314. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
  315. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
  316. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
  317. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
  318. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
  319. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
  320. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
  321. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
  322. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
  323. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
  324. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
  325. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
  326. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
  327. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
  328. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
  329. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
  330. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
  331. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
  332. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
  333. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
  334. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
  335. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
  336. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
  337. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
  338. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
  339. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
  340. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
  341. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
  342. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
  343. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
  344. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
  345. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
  346. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
  347. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
  348. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
  349. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
  350. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
  351. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
  352. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
  353. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
  354. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
  355. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
  356. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
  357. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
  358. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
  359. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
  360. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
  361. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
  362. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
  363. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
  364. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
  365. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
  366. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
  367. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
  368. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
  369. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
  370. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
  371. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
  372. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
  373. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
  374. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
  375. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
  376. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
  377. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
  378. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
  379. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
  380. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
  381. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
  382. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
  383. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
  384. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
  385. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
  386. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
  387. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
  388. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
  389. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
  390. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
  391. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
  392. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
  393. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
  394. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
  395. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
  396. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
  397. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
  398. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
  399. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
  400. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
  401. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
  402. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
  403. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
  404. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
  405. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
  406. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
  407. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
  408. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
  409. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
  410. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
  411. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
  412. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
  413. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
  414. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
  415. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
  416. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
  417. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
  418. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
  419. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
  420. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
  421. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
  422. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
  423. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
  424. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
  425. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
  426. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
  427. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
  428. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/requirements.txt +0 -0
  429. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
  430. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
  431. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
  432. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
  433. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
  434. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
  435. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
  436. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
  437. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
  438. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
  439. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
  440. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
  441. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
  442. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/client.py +0 -0
  443. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
  444. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
  445. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
  446. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
  447. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
  448. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
  449. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
  450. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
  451. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
  452. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
  453. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
  454. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
  455. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
  456. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
  457. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
  458. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
  459. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
  460. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
  461. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
  462. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
  463. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
  464. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
  465. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/server.py +0 -0
  466. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
  467. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
  468. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
  469. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
  470. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
  471. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
  472. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
  473. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
  474. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
  475. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
  476. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
  477. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
  478. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
  479. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
  480. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
  481. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
  482. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
  483. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
  484. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_vendor/websockets/version.py +0 -0
  485. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/_version.py +0 -0
  486. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/auth/__init__.py +0 -0
  487. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/auth/consent_form.py +0 -0
  488. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/auth/oidc_compat.py +0 -0
  489. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/auth/provider.py +0 -0
  490. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/browser_landing.py +0 -0
  491. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/client/__init__.py +0 -0
  492. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/client/rest_client.py +0 -0
  493. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/client/supervisor_client.py +0 -0
  494. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/client/websocket_client.py +0 -0
  495. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/client/websocket_listener.py +0 -0
  496. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
  497. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
  498. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
  499. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
  500. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
  501. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
  502. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/errors.py +0 -0
  503. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/ha_request_queue.py +0 -0
  504. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/hacs_auto_refresh.py +0 -0
  505. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/http_transport.py +0 -0
  506. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/log_filters.py +0 -0
  507. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/policy/__init__.py +0 -0
  508. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/policy/approval_queue.py +0 -0
  509. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/policy/editing.py +0 -0
  510. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/policy/evaluator.py +0 -0
  511. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/policy/handlers.py +0 -0
  512. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/policy/middleware.py +0 -0
  513. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/policy/model.py +0 -0
  514. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/policy/persistence.py +0 -0
  515. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/policy/value_sources.py +0 -0
  516. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/py.typed +0 -0
  517. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/read_only.py +0 -0
  518. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/redaction.py +0 -0
  519. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/renamed_tools.py +0 -0
  520. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
  521. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
  522. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
  523. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
  524. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/resources/skills-vendor/.github/pull_request_template.md +0 -0
  525. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
  526. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
  527. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
  528. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  529. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
  530. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/resources/skills-vendor/evals/area-target-over-entity-list/case.yaml +0 -0
  531. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/resources/skills-vendor/evals/arrive-home-automation/case.yaml +0 -0
  532. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/resources/skills-vendor/evals/assist-shortcut-card/case.yaml +0 -0
  533. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/resources/skills-vendor/evals/avg-temperature/case.yaml +0 -0
  534. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/resources/skills-vendor/evals/backup-deletion-confirmation/case.yaml +0 -0
  535. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/resources/skills-vendor/evals/blueprint-authoring/case.yaml +0 -0
  536. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/resources/skills-vendor/evals/button-event-entity/case.yaml +0 -0
  537. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/resources/skills-vendor/evals/device-id-trigger-migration/case.yaml +0 -0
  538. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/resources/skills-vendor/evals/helper-flow-fields-not-platform-yaml/case.yaml +0 -0
  539. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/resources/skills-vendor/evals/media-player-song/case.yaml +0 -0
  540. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/resources/skills-vendor/evals/motion-light-automation-mode/case.yaml +0 -0
  541. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/resources/skills-vendor/evals/rename-entity-impact-analysis/case.yaml +0 -0
  542. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/resources/skills-vendor/evals/template-attributes-yaml-exception/case.yaml +0 -0
  543. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/resources/skills-vendor/evals/timer-finished-automation/case.yaml +0 -0
  544. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/resources/skills-vendor/evals/vacuum-last-clean/case.yaml +0 -0
  545. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/resources/skills-vendor/scripts/check_eval_cases.py +0 -0
  546. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  547. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
  548. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
  549. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
  550. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
  551. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  552. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  553. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  554. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  555. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  556. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  557. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  558. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
  559. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  560. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
  561. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/settings_ui/__init__.py +0 -0
  562. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
  563. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
  564. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
  565. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
  566. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
  567. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
  568. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/settings_ui/_i18n.py +0 -0
  569. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
  570. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/settings_ui/_persistence.py +0 -0
  571. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
  572. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/settings_ui/_theme.py +0 -0
  573. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
  574. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/settings_ui/locales/README.md +0 -0
  575. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
  576. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/settings_ui/locales/de.json +0 -0
  577. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/settings_ui/locales/en.json +0 -0
  578. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
  579. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/settings_ui/locales/es.json +0 -0
  580. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
  581. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/settings_ui/locales/it.json +0 -0
  582. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
  583. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
  584. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
  585. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
  586. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
  587. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
  588. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
  589. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
  590. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/settings_ui/settings.css +0 -0
  591. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/settings_ui/settings.html +0 -0
  592. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/settings_ui/settings.js +0 -0
  593. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/smoke_test.py +0 -0
  594. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  595. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/strict_bps.py +0 -0
  596. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tool_dispatch.py +0 -0
  597. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/__init__.py +0 -0
  598. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/auto_backup.py +0 -0
  599. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/backup.py +0 -0
  600. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  601. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/best_practice_result.py +0 -0
  602. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/best_practice_variables.py +0 -0
  603. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/blueprint_sources.py +0 -0
  604. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
  605. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/blueprint_write.py +0 -0
  606. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/bulk_selector.py +0 -0
  607. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/component_api.py +0 -0
  608. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/component_config_entries.py +0 -0
  609. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/component_config_reads.py +0 -0
  610. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
  611. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/component_devices.py +0 -0
  612. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/component_registries.py +0 -0
  613. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
  614. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/config_entry_flow.py +0 -0
  615. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
  616. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
  617. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
  618. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/config_entry_identity.py +0 -0
  619. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
  620. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
  621. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
  622. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/device_control.py +0 -0
  623. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/entity_registration.py +0 -0
  624. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/error_log_parsing.py +0 -0
  625. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/hacs_registration.py +0 -0
  626. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/helpers.py +0 -0
  627. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
  628. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/log_common.py +0 -0
  629. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/log_sources.py +0 -0
  630. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/log_sources_fault.py +0 -0
  631. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
  632. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/radio/__init__.py +0 -0
  633. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/radio/base.py +0 -0
  634. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/radio/matter.py +0 -0
  635. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/radio/thread.py +0 -0
  636. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/radio/zigbee.py +0 -0
  637. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/radio/zwave.py +0 -0
  638. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/reference_validator.py +0 -0
  639. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/registry.py +0 -0
  640. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
  641. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/scene_discovery.py +0 -0
  642. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  643. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  644. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  645. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
  646. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  647. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  648. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
  649. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  650. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  651. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  652. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
  653. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/tools_addons.py +0 -0
  654. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/tools_areas.py +0 -0
  655. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
  656. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  657. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  658. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/tools_camera.py +0 -0
  659. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/tools_categories.py +0 -0
  660. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/tools_code.py +0 -0
  661. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/tools_config_automations.py +0 -0
  662. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
  663. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  664. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
  665. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
  666. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
  667. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/tools_dev.py +0 -0
  668. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/tools_energy.py +0 -0
  669. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/tools_entities.py +0 -0
  670. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  671. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/tools_groups.py +0 -0
  672. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/tools_hacs.py +0 -0
  673. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/tools_history.py +0 -0
  674. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/tools_integrations.py +0 -0
  675. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/tools_labels.py +0 -0
  676. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/tools_logs.py +0 -0
  677. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/tools_radio.py +0 -0
  678. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/tools_registry.py +0 -0
  679. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/tools_resources.py +0 -0
  680. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/tools_search.py +0 -0
  681. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/tools_security_policy.py +0 -0
  682. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/tools_service.py +0 -0
  683. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/tools_services.py +0 -0
  684. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/tools_system.py +0 -0
  685. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/tools_themes.py +0 -0
  686. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/tools_todo.py +0 -0
  687. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/tools_traces.py +0 -0
  688. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/tools_updates.py +0 -0
  689. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/tools_utility.py +0 -0
  690. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  691. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  692. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
  693. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/tools_zones.py +0 -0
  694. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/util_helpers.py +0 -0
  695. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/tools/validation_middleware.py +0 -0
  696. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/transforms/__init__.py +0 -0
  697. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/transforms/categorized_search.py +0 -0
  698. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/transforms/component_search.py +0 -0
  699. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  700. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/transforms/write_tool_note.py +0 -0
  701. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/transport_security.py +0 -0
  702. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/update_check.py +0 -0
  703. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/utils/__init__.py +0 -0
  704. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/utils/config_hash.py +0 -0
  705. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/utils/config_write_lock.py +0 -0
  706. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/utils/dashboard_patch.py +0 -0
  707. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/utils/data_paths.py +0 -0
  708. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
  709. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/utils/domain_handlers.py +0 -0
  710. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/utils/entity_membership.py +0 -0
  711. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  712. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  713. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/utils/mcp_client_host.py +0 -0
  714. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/utils/operation_manager.py +0 -0
  715. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/utils/python_sandbox.py +0 -0
  716. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/utils/registry_update_lock.py +0 -0
  717. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/utils/skill_loader.py +0 -0
  718. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/utils/usage_logger.py +0 -0
  719. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/visibility/__init__.py +0 -0
  720. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/visibility/enforcement.py +0 -0
  721. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/visibility/model.py +0 -0
  722. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/visibility/persistence.py +0 -0
  723. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp/visibility/resolver.py +0 -0
  724. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp_dev.egg-info/SOURCES.txt +0 -0
  725. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
  726. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
  727. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
  728. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
  729. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/tests/__init__.py +0 -0
  730. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/tests/test_constants.py +0 -0
  731. {ha_mcp_dev-8.5.0.dev2693 → ha_mcp_dev-8.5.0.dev2696}/tests/test_env_manager.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ha-mcp-dev
3
- Version: 8.5.0.dev2693
3
+ Version: 8.5.0.dev2696
4
4
  Summary: Home Assistant MCP Server - Complete control of Home Assistant through MCP
5
5
  Author-email: Julien <github@qc-h.net>
6
6
  License: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "8.5.0.dev2693"
7
+ version = "8.5.0.dev2696"
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
@@ -56,7 +56,7 @@ from collections import Counter
56
56
  from collections.abc import AsyncIterator, Awaitable, Callable
57
57
  from contextlib import AsyncExitStack, asynccontextmanager, suppress
58
58
  from dataclasses import dataclass, field
59
- from datetime import UTC, datetime
59
+ from datetime import UTC, datetime, timedelta
60
60
  from functools import cached_property
61
61
  from pathlib import Path
62
62
  from typing import Any, Literal, NotRequired, TypedDict
@@ -65,7 +65,11 @@ import yaml # type: ignore[import-untyped]
65
65
 
66
66
  from ha_mcp._vendor.fastmcp.exceptions import ToolError
67
67
 
68
- from .client.rest_client import HomeAssistantConnectionError, HomeAssistantError
68
+ from .client.rest_client import (
69
+ HomeAssistantCommandError,
70
+ HomeAssistantConnectionError,
71
+ HomeAssistantError,
72
+ )
69
73
  from .utils.data_paths import get_data_dir
70
74
  from .utils.registry_update_lock import registry_update_lock
71
75
 
@@ -2464,9 +2468,76 @@ async def _restore_group(client: Any, entity_id: str, config: Any) -> Any:
2464
2468
  # Calendar events — calendar.get_events to fetch, calendar.create/update services.
2465
2469
 
2466
2470
 
2471
+ # Bounds of the second sweep below: wide enough for a past event or one booked
2472
+ # well ahead, without asking a busy calendar to expand a decade of recurrences.
2473
+ _CALENDAR_WIDE_LOOKBACK_DAYS = 366
2474
+ _CALENDAR_WIDE_LOOKAHEAD_DAYS = 732
2475
+
2476
+
2477
+ async def _find_calendar_event(
2478
+ client: Any,
2479
+ cal: str,
2480
+ uid: str,
2481
+ recurrence_id: str | None,
2482
+ start: datetime,
2483
+ end: datetime,
2484
+ ) -> Any:
2485
+ """Return the event with ``uid`` on ``cal`` between ``start`` and ``end``.
2486
+
2487
+ Reads the REST calendar view rather than the ``calendar.get_events``
2488
+ service: the service response is built by HA's
2489
+ ``_list_events_dict_factory``, which keeps only ``LIST_EVENT_FIELDS``
2490
+ (start/end/summary/description/location/status) and therefore carries no
2491
+ ``uid`` to match on. ``/api/calendars/{entity_id}`` serialises the whole
2492
+ CalendarEvent, so uid, recurrence_id and rrule survive — the same endpoint
2493
+ ``ha_config_get_calendar_events`` reads.
2494
+
2495
+ A recurring series is expanded into occurrences that all share the ``uid``,
2496
+ so ``recurrence_id`` selects which one; without it the first match wins.
2497
+ """
2498
+ try:
2499
+ events = await client._request(
2500
+ "GET",
2501
+ f"/calendars/{cal}",
2502
+ params={"start": start.isoformat(), "end": end.isoformat()},
2503
+ )
2504
+ except HomeAssistantError as err:
2505
+ # Only treat 404 (calendar entity not present) as "skip silently".
2506
+ # Auth/transport/server errors deserve a WARNING so an operator
2507
+ # can spot a misconfigured calendar integration; matches the
2508
+ # ``status_code == 404`` narrowing the automation/script/scene
2509
+ # fetchers use.
2510
+ if getattr(err, "status_code", None) == 404:
2511
+ return None
2512
+ raise
2513
+ for event in _require_list(events, f"/calendars/{cal}"):
2514
+ if not isinstance(event, dict) or event.get("uid") != uid:
2515
+ continue
2516
+ if recurrence_id is not None and event.get("recurrence_id") != recurrence_id:
2517
+ continue
2518
+ return event
2519
+ return None
2520
+
2521
+
2522
+ def _recurrence_id_window(
2523
+ recurrence_id: str | None,
2524
+ ) -> tuple[datetime, datetime] | None:
2525
+ """A day-wide window around an iCalendar recurrence id, if it parses."""
2526
+ if not recurrence_id:
2527
+ return None
2528
+ for fmt in ("%Y%m%dT%H%M%S", "%Y%m%dT%H%M%SZ", "%Y%m%d"):
2529
+ try:
2530
+ at = datetime.strptime(recurrence_id, fmt).replace(tzinfo=UTC)
2531
+ except ValueError:
2532
+ continue
2533
+ return at - timedelta(days=1), at + timedelta(days=1)
2534
+ return None
2535
+
2536
+
2467
2537
  async def _fetch_calendar_event(client: Any, entity_id: str) -> Any:
2468
- # entity_id is "<calendar.entity>::<event_uid>"
2469
- cal, _, uid = entity_id.partition("::")
2538
+ # entity_id is "<calendar.entity>::<event_uid>[::<recurrence_id>]"
2539
+ cal, _, rest = entity_id.partition("::")
2540
+ uid, _, recurrence_id = rest.partition("::")
2470
2541
  if not cal or not uid:
2471
2542
  return None
2472
2543
  # Configurable lookahead window. Default 7 days catches typical edits;
@@ -2482,48 +2553,186 @@ async def _fetch_calendar_event(client: Any, entity_id: str) -> Any:
2482
2553
  except (AttributeError, ImportError, ValueError, TypeError):
2483
2554
  days = 7
2484
2555
  days = max(1, min(365, days))
2485
- start = datetime.now(UTC).isoformat()
2486
- payload = {
2487
- "type": "execute_script",
2488
- "sequence": [
2489
- {
2490
- "service": "calendar.get_events",
2491
- "target": {"entity_id": cal},
2492
- "data": {"duration": {"days": days}, "start_date_time": start},
2493
- "response_variable": "events",
2494
- },
2495
- {"stop": "", "response_variable": "events"},
2496
- ],
2497
- }
2498
- try:
2499
- result = await _ws_send(client, payload)
2500
- except HomeAssistantError as err:
2501
- # Only treat 404 (calendar entity not present) as "skip silently".
2502
- # Auth/transport/server errors deserve a WARNING so an operator
2503
- # can spot a misconfigured calendar integration; matches the
2504
- # ``status_code == 404`` narrowing the automation/script/scene
2505
- # fetchers use.
2506
- if getattr(err, "status_code", None) == 404:
2507
- return None
2508
- raise
2509
- result = _require_dict(result, "execute_script")
2510
- events = result.get("response", {}).get("events", {}).get(cal, {}).get("events", [])
2511
- for ev in events:
2512
- if ev.get("uid") == uid:
2513
- return {"calendar_entity_id": cal, **ev}
2556
+ now = datetime.now(UTC)
2557
+ wanted = recurrence_id or None
2558
+ # A recurrence_id names the occurrence's own date, so an occurrence far
2559
+ # outside the windows below is still found in one request.
2560
+ around = _recurrence_id_window(wanted)
2561
+ found = (
2562
+ await _find_calendar_event(client, cal, uid, wanted, *around)
2563
+ if around
2564
+ else None
2565
+ )
2566
+ if found is None:
2567
+ found = await _find_calendar_event(
2568
+ client, cal, uid, wanted, now, now + timedelta(days=days)
2569
+ )
2570
+ if found is None:
2571
+ # The configured window is the cheap common case, not the contract: a
2572
+ # write targets an event by uid, and an event being edited or deleted
2573
+ # can sit in the past or well beyond the lookahead. Missing it would
2574
+ # silently skip the snapshot and leave the prior values unrecoverable,
2575
+ # so sweep once more over a wide window before concluding it is gone.
2576
+ found = await _find_calendar_event(
2577
+ client,
2578
+ cal,
2579
+ uid,
2580
+ wanted,
2581
+ now - timedelta(days=_CALENDAR_WIDE_LOOKBACK_DAYS),
2582
+ now + timedelta(days=_CALENDAR_WIDE_LOOKAHEAD_DAYS),
2583
+ )
2584
+ if found is None:
2585
+ return None
2586
+ if wanted is None and found.get("rrule"):
2587
+ # The write targets a whole series, but the calendar view only exposes
2588
+ # expanded OCCURRENCES — never the master event's own start. Restoring
2589
+ # one occurrence's values would revert a single date and leave the rest
2590
+ # of the series edited, or re-create a series starting at the wrong
2591
+ # date, both reported as a successful restore. No snapshot is the
2592
+ # honest answer; a single-occurrence write (which carries a
2593
+ # recurrence_id) is captured normally.
2594
+ logger.warning(
2595
+ "Auto-backup: no snapshot for series-wide write on %s (event %s); "
2596
+ "Home Assistant exposes only expanded occurrences, so the series "
2597
+ "could not be restored faithfully",
2598
+ cal,
2599
+ uid,
2600
+ )
2601
+ return None
2602
+ return {"calendar_entity_id": cal, **found}
2603
+
2604
+
2605
+ def _calendar_bound(value: Any) -> tuple[str, bool] | None:
2606
+ """Return ``(iso_value, is_date_only)`` for a snapshotted event boundary.
2607
+
2608
+ The REST view wraps each boundary as ``{"dateTime": ...}`` (timed) or
2609
+ ``{"date": ...}`` (all-day); snapshots taken before that switch hold a
2610
+ flat ISO string, which a 10-character length identifies as date-only.
2611
+ """
2612
+ if isinstance(value, dict):
2613
+ if value.get("dateTime"):
2614
+ return str(value["dateTime"]), False
2615
+ if value.get("date"):
2616
+ return str(value["date"]), True
2617
+ return None
2618
+ if isinstance(value, str) and value:
2619
+ return value, len(value) == 10
2514
2620
  return None
2515
2621
 
2516
2622
 
2623
+ # HA reports a missing event as a plain ``failed`` command error whose message
2624
+ # comes from the integration (Local Calendar surfaces ical's "No existing item
2625
+ # with uid/recurrence_id: ..."), so absence has to be read off the message.
2626
+ _CALENDAR_EVENT_ABSENT_MARKERS = ("no existing item", "not found", "does not exist")
2627
+
2628
+
2629
+ def _calendar_update_cannot_apply(err: HomeAssistantCommandError) -> bool:
2630
+ """Whether ``err`` proves the in-place update never touched the event."""
2631
+ if getattr(err, "code", None) == "not_supported":
2632
+ # The calendar advertises no UPDATE_EVENT, so it cannot ever accept
2633
+ # the update and re-creating is the only restore available.
2634
+ return True
2635
+ message = str(err).lower()
2636
+ return any(marker in message for marker in _CALENDAR_EVENT_ABSENT_MARKERS)
2637
+
2638
+
2639
+ async def _recreate_calendar_event(
2640
+ client: Any,
2641
+ cal: str,
2642
+ event: dict[str, Any],
2643
+ start: tuple[str, bool],
2644
+ end: tuple[str, bool],
2645
+ ) -> Any:
2646
+ """Create an event that no longer exists under its snapshotted uid.
2647
+
2648
+ Always a single event: a series-wide write is never snapshotted (the
2649
+ calendar view cannot describe the series), and a snapshot of one
2650
+ occurrence must not be re-created as a series of its own.
2651
+ """
2652
+ data: dict[str, Any] = {"entity_id": cal, "summary": event["summary"]}
2653
+ if start[1]:
2654
+ data.update({"start_date": start[0], "end_date": end[0]})
2655
+ else:
2656
+ data.update({"start_date_time": start[0], "end_date_time": end[0]})
2657
+ for key in ("description", "location"):
2658
+ if event.get(key):
2659
+ data[key] = event[key]
2660
+ return await _rest_post(client, "services/calendar/create_event", data)
2661
+
2662
+
2517
2663
  async def _restore_calendar_event(client: Any, entity_id: str, config: Any) -> Any:
2518
- cal = config.get("calendar_entity_id")
2519
- if not cal:
2520
- cal = entity_id.split("::", 1)[0]
2521
- data = {k: v for k, v in config.items() if k != "calendar_entity_id"}
2522
- return await _rest_post(
2523
- client,
2524
- "services/calendar/create_event",
2525
- {"entity_id": cal, **data},
2526
- )
2664
+ cal, _, rest = entity_id.partition("::")
2665
+ key_uid, _, key_recurrence_id = rest.partition("::")
2666
+ cal = config.get("calendar_entity_id") or cal
2667
+ uid = config.get("uid") or key_uid
2668
+ recurrence_id = config.get("recurrence_id") or key_recurrence_id or None
2669
+ start = _calendar_bound(config.get("start"))
2670
+ end = _calendar_bound(config.get("end"))
2671
+ if start is None or end is None:
2672
+ raise HomeAssistantError(
2673
+ f"Calendar snapshot for {entity_id!r} has no usable start/end"
2674
+ )
2675
+
2676
+ # Home Assistant merges the update into the stored event (ical dumps it
2677
+ # with ``exclude_unset``), so a field left out keeps whatever the write
2678
+ # put there. Send the text fields unconditionally — empty clears a
2679
+ # description or location the write added.
2680
+ event: dict[str, Any] = {
2681
+ "summary": config.get("summary") or "",
2682
+ "dtstart": start[0],
2683
+ "dtend": end[0],
2684
+ "description": config.get("description") or "",
2685
+ "location": config.get("location") or "",
2686
+ }
2687
+ # ``rrule`` is deliberately never replayed. Every expanded occurrence
2688
+ # carries the series' rule, and sending it back onto one occurrence —
2689
+ # which ical has already forked into a plain event — would make that
2690
+ # occurrence a second series under the same uid, duplicating every later
2691
+ # date.
2692
+
2693
+ if not uid:
2694
+ return await _recreate_calendar_event(client, cal, event, start, end)
2695
+
2696
+ # An edited event still exists under its uid, so put the captured values
2697
+ # back in place instead of creating a second copy. Only a snapshot of a
2698
+ # DELETED event (or a calendar without UPDATE_EVENT) falls through to
2699
+ # re-creation.
2700
+ message: dict[str, Any] = {
2701
+ "type": "calendar/event/update",
2702
+ "entity_id": cal,
2703
+ "uid": uid,
2704
+ "event": event,
2705
+ }
2706
+ if recurrence_id:
2707
+ message["recurrence_id"] = recurrence_id
2708
+ try:
2709
+ return await _ws_send(client, message)
2710
+ except HomeAssistantCommandError as err:
2711
+ if not _calendar_update_cannot_apply(err):
2712
+ # A transport drop, a timeout or an unclassified command failure
2713
+ # leaves it unknown whether HA applied the update; re-creating
2714
+ # then leaves a duplicate behind. Only a failure that PROVES the
2715
+ # update never landed falls through. Connection errors and
2716
+ # timeouts are separate types, so they never reach here at all.
2717
+ raise
2718
+ if recurrence_id:
2719
+ # The occurrence is gone — deleted from the series, or the series
2720
+ # moved and this recurrence_id no longer names one of its dates.
2721
+ # ``create_event`` could only add a detached event next to the
2722
+ # series, which is not the occurrence being restored, so say so
2723
+ # instead of inventing one.
2724
+ raise HomeAssistantError(
2725
+ f"Occurrence {recurrence_id} of event {uid} no longer exists on "
2726
+ f"{cal}, and an occurrence cannot be re-created into its series"
2727
+ ) from err
2728
+ logger.info(
2729
+ "Restoring calendar event %s on %s in place is not possible (%s); "
2730
+ "re-creating it instead",
2731
+ uid,
2732
+ cal,
2733
+ err,
2734
+ )
2735
+ return await _recreate_calendar_event(client, cal, event, start, end)
2527
2736
 
2528
2737
 
2529
2738
  # Zones — zone/{list,update} (no ``config/`` prefix per HA's actual WS API;
@@ -1591,6 +1591,7 @@ def set_embedded_connection(
1591
1591
  token: str,
1592
1592
  verify_ssl: bool | None = None,
1593
1593
  config_dir: str | None = None,
1594
+ llm_api_enabled: bool | None = None,
1594
1595
  ) -> None:
1595
1596
  """Register the in-process HA connection for embedded mode.
1596
1597
 
@@ -1633,6 +1634,10 @@ def set_embedded_connection(
1633
1634
  _EMBEDDED_CONNECTION.pop("config_dir", None)
1634
1635
  else:
1635
1636
  _EMBEDDED_CONNECTION["config_dir"] = config_dir
1637
+ if llm_api_enabled is None:
1638
+ _EMBEDDED_CONNECTION.pop("llm_api_enabled", None)
1639
+ else:
1640
+ _EMBEDDED_CONNECTION["llm_api_enabled"] = llm_api_enabled
1636
1641
  if _settings is not None:
1637
1642
  _apply_embedded_connection(_settings)
1638
1643
 
@@ -1648,6 +1653,20 @@ def get_embedded_config_dir() -> str | None:
1648
1653
  return config_dir if isinstance(config_dir, str) and config_dir else None
1649
1654
 
1650
1655
 
1656
+ def should_emit_llm_api_metadata() -> bool:
1657
+ """Return whether ``tools/list`` needs the component's private metadata.
1658
+
1659
+ Standalone and add-on clients have no consumer for ``_meta.ha_mcp``. An
1660
+ embedded server needs it only when the custom component exposes its LLM
1661
+ API. A missing flag means an older component, so preserve the historical
1662
+ embedded behavior until that component is upgraded.
1663
+ """
1664
+ if not _EMBEDDED_CONNECTION:
1665
+ return False
1666
+ enabled = _EMBEDDED_CONNECTION.get("llm_api_enabled")
1667
+ return enabled if isinstance(enabled, bool) else True
1668
+
1669
+
1651
1670
  def _reset_embedded_connection() -> None:
1652
1671
  """Drop the registered embedded connection (test seam).
1653
1672
 
@@ -12,8 +12,9 @@ axis from the global enable/disable in the settings UI:
12
12
  conversation agents — in both the full-catalog and tool-search exposure
13
13
  modes of the component.
14
14
 
15
- The single source of truth travels **in-band**: :class:`LlmExposureMiddleware`
16
- stamps every ``tools/list`` entry with
15
+ For embedded servers with the Home Assistant LLM API enabled, the single
16
+ source of truth travels **in-band**: :class:`LlmExposureMiddleware` stamps
17
+ every ``tools/list`` entry with
17
18
  ``_meta.ha_mcp = {"llm_api_exposed": bool, "pinned": bool, "policy": {...}}``
18
19
  so the component (one more loopback MCP client) filters on data that can never
19
20
  drift from the server's settings, with zero extra round-trips. The ``policy``
@@ -158,11 +159,14 @@ def _pinned_tool_names() -> set[str]:
158
159
 
159
160
 
160
161
  class LlmExposureMiddleware(Middleware):
161
- """Stamp every listed tool with its LLM-API exposure + pinned state.
162
+ """Stamp listed tools when an embedded LLM-API connection is enabled.
162
163
 
163
164
  Runs after the visibility layer, so globally-disabled tools are already
164
- absent and never carry a stamp. The stamp is additive metadata — no tool
165
- is hidden or altered for regular MCP clients.
165
+ absent and never carry a stamp. ``server.py`` installs this middleware for
166
+ an embedded connection whose LLM API is enabled; older components that do
167
+ not send that flag retain the historical stamping behavior. Where it is
168
+ installed, the stamp is additive metadata — no tool is hidden or altered
169
+ for regular MCP clients.
166
170
  """
167
171
 
168
172
  def __init__(self, policy_live: Callable[[], bool] | None = None) -> None:
@@ -227,6 +231,10 @@ class LlmExposureMiddleware(Middleware):
227
231
  return self._policy_cache[1]
228
232
  from ._version import is_embedded, is_running_in_addon
229
233
 
234
+ # Today this middleware is registered only for embedded connections.
235
+ # Keep the deployment branches because the middleware is also useful
236
+ # in direct-server tests and may be registered by another integration;
237
+ # the metadata must describe the server that actually answered.
230
238
  block: dict[str, Any] = {
231
239
  "enabled": False,
232
240
  "live": bool(self._policy_live()) if self._policy_live else False,
@@ -258,20 +258,24 @@ class HomeAssistantSmartMCPServer:
258
258
 
259
259
  self.mcp.add_middleware(ToolSearchHintMiddleware())
260
260
 
261
- # Stamp every tools/list entry with its conversation-agent LLM API
262
- # exposure + pinned state (#1745). Additive metadata only — regular
263
- # clients are unaffected; the ha_mcp_tools custom component filters
264
- # what it offers to Home Assistant conversation agents on it.
265
- from .llm_exposure import LlmExposureMiddleware
266
-
267
- # policy_live: whether the gating middleware/queue actually wired at
268
- # startup — stamped so a client can distinguish "configured" from
269
- # "enforcing" on the very connection it is using (#1990).
270
- self.mcp.add_middleware(
271
- LlmExposureMiddleware(
272
- policy_live=lambda: getattr(self, "approval_queue", None) is not None
261
+ # Only the custom component's conversation-agent LLM API consumes the
262
+ # private per-tool stamp. Avoid adding it to standalone/add-on catalogs,
263
+ # or to an embedded server whose LLM API is disabled (#2479).
264
+ from .config import should_emit_llm_api_metadata
265
+
266
+ if should_emit_llm_api_metadata():
267
+ from .llm_exposure import LlmExposureMiddleware
268
+
269
+ # policy_live: whether the gating middleware/queue actually wired
270
+ # at startup — stamped so the component can distinguish configured
271
+ # from enforcing on the connection it is using (#1990).
272
+ self.mcp.add_middleware(
273
+ LlmExposureMiddleware(
274
+ policy_live=lambda: (
275
+ getattr(self, "approval_queue", None) is not None
276
+ )
277
+ )
273
278
  )
274
- )
275
279
 
276
280
  # Entity visibility enforce mode, INBOUND half (#2015) — always
277
281
  # installed, consults the live config per request (no-op unless