ha-mcp-dev 8.5.0.dev2694__tar.gz → 8.5.0.dev2699__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.dev2694/src/ha_mcp_dev.egg-info → ha_mcp_dev-8.5.0.dev2699}/PKG-INFO +1 -1
  2. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/pyproject.toml +1 -1
  3. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/backup_manager.py +251 -42
  4. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/settings_ui/locales/cs.json +3 -3
  5. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/settings_ui/locales/de.json +3 -3
  6. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/settings_ui/locales/eo.json +3 -3
  7. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/settings_ui/locales/es.json +3 -3
  8. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/settings_ui/locales/fr.json +3 -3
  9. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/settings_ui/locales/it.json +3 -3
  10. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/settings_ui/locales/ko.json +3 -3
  11. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/settings_ui/locales/nl.json +3 -3
  12. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/settings_ui/locales/pl.json +3 -3
  13. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/settings_ui/locales/ru.json +3 -3
  14. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/settings_ui/locales/sv.json +3 -3
  15. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/settings_ui/locales/zh-Hans.json +3 -3
  16. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/settings_ui/locales/zh-Hant.json +3 -3
  17. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/tools_calendar.py +396 -57
  18. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699/src/ha_mcp_dev.egg-info}/PKG-INFO +1 -1
  19. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/LICENSE +0 -0
  20. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/MANIFEST.in +0 -0
  21. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/README.md +0 -0
  22. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/setup.cfg +0 -0
  23. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/__init__.py +0 -0
  24. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/__main__.py +0 -0
  25. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_pypi_marker +0 -0
  26. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_rich_compat.py +0 -0
  27. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/__init__.py +0 -0
  28. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
  29. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
  30. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
  31. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
  32. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
  33. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
  34. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
  35. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
  36. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
  37. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
  38. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
  39. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
  40. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
  41. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
  42. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
  43. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
  44. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
  45. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
  46. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
  47. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
  48. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
  49. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
  50. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
  51. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
  52. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
  53. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
  54. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
  55. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
  56. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
  57. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
  58. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
  59. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
  60. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
  61. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
  62. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
  63. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
  64. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
  65. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
  66. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
  67. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
  68. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
  69. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
  70. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
  71. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
  72. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
  73. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
  74. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
  75. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
  76. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
  77. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
  78. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
  79. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
  80. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
  81. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
  82. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
  83. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
  84. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
  85. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
  86. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
  87. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
  88. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
  89. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
  90. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
  91. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
  92. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
  93. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
  94. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
  95. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
  96. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
  97. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
  98. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
  99. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
  100. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
  101. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
  102. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
  103. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
  104. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
  105. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
  106. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
  107. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
  108. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
  109. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
  110. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
  111. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
  112. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
  113. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
  114. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
  115. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
  116. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
  117. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
  118. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
  119. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
  120. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
  121. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
  122. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
  123. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
  124. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
  125. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
  126. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
  127. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
  128. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
  129. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
  130. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
  131. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
  132. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
  133. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
  134. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
  135. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
  136. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
  137. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
  138. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
  139. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
  140. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
  141. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
  142. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
  143. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
  144. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
  145. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
  146. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
  147. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
  148. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
  149. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
  150. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
  151. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
  152. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
  153. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
  154. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
  155. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
  156. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
  157. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
  158. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
  159. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
  160. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
  161. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
  162. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
  163. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
  164. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
  165. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
  166. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
  167. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
  168. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
  169. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
  170. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
  171. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
  172. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
  173. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
  174. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
  175. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
  176. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
  177. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
  178. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
  179. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
  180. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
  181. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
  182. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
  183. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
  184. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
  185. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
  186. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
  187. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
  188. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
  189. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
  190. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
  191. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
  192. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
  193. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
  194. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
  195. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
  196. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
  197. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
  198. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
  199. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
  200. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
  201. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
  202. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
  203. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
  204. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
  205. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
  206. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
  207. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
  208. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
  209. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
  210. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
  211. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
  212. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
  213. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
  214. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
  215. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
  216. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
  217. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
  218. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
  219. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
  220. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
  221. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
  222. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
  223. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
  224. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
  225. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
  226. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
  227. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
  228. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
  229. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
  230. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
  231. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
  232. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
  233. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
  234. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
  235. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
  236. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
  237. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
  238. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
  239. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
  240. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
  241. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
  242. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
  243. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
  244. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
  245. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
  246. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
  247. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
  248. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
  249. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
  250. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
  251. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
  252. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
  253. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
  254. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
  255. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
  256. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
  257. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
  258. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
  259. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
  260. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
  261. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
  262. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
  263. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
  264. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
  265. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
  266. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
  267. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
  268. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
  269. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
  270. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
  271. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
  272. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
  273. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
  274. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
  275. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
  276. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
  277. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
  278. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
  279. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
  280. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
  281. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
  282. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
  283. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
  284. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
  285. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
  286. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
  287. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
  288. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
  289. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
  290. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
  291. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
  292. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
  293. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
  294. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
  295. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
  296. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
  297. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
  298. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
  299. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
  300. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
  301. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
  302. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
  303. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
  304. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
  305. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
  306. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
  307. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
  308. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
  309. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
  310. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
  311. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
  312. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
  313. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
  314. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
  315. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
  316. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
  317. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
  318. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
  319. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
  320. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
  321. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
  322. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
  323. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
  324. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
  325. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
  326. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
  327. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
  328. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
  329. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
  330. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
  331. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
  332. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
  333. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
  334. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
  335. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
  336. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
  337. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
  338. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
  339. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
  340. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
  341. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
  342. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
  343. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
  344. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
  345. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
  346. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
  347. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
  348. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
  349. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
  350. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
  351. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
  352. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
  353. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
  354. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
  355. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
  356. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
  357. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
  358. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
  359. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
  360. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
  361. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
  362. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
  363. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
  364. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
  365. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
  366. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
  367. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
  368. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
  369. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
  370. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
  371. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
  372. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
  373. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
  374. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
  375. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
  376. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
  377. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
  378. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
  379. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
  380. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
  381. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
  382. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
  383. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
  384. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
  385. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
  386. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
  387. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
  388. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
  389. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
  390. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
  391. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
  392. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
  393. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
  394. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
  395. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
  396. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
  397. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
  398. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
  399. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
  400. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
  401. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
  402. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
  403. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
  404. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
  405. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
  406. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
  407. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
  408. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
  409. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
  410. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
  411. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
  412. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
  413. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
  414. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
  415. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
  416. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
  417. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
  418. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
  419. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
  420. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
  421. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
  422. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
  423. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
  424. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
  425. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
  426. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
  427. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
  428. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
  429. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
  430. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
  431. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
  432. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
  433. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
  434. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
  435. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
  436. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
  437. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
  438. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/requirements.txt +0 -0
  439. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
  440. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
  441. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
  442. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
  443. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
  444. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
  445. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
  446. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
  447. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
  448. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
  449. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
  450. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
  451. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
  452. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/client.py +0 -0
  453. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
  454. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
  455. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
  456. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
  457. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
  458. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
  459. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
  460. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
  461. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
  462. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
  463. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
  464. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
  465. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
  466. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
  467. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
  468. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
  469. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
  470. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
  471. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
  472. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
  473. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
  474. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
  475. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/server.py +0 -0
  476. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
  477. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
  478. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
  479. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
  480. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
  481. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
  482. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
  483. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
  484. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
  485. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
  486. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
  487. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
  488. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
  489. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
  490. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
  491. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
  492. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
  493. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
  494. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_vendor/websockets/version.py +0 -0
  495. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/_version.py +0 -0
  496. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/auth/__init__.py +0 -0
  497. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/auth/consent_form.py +0 -0
  498. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/auth/oidc_compat.py +0 -0
  499. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/auth/provider.py +0 -0
  500. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/browser_landing.py +0 -0
  501. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/client/__init__.py +0 -0
  502. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/client/rest_client.py +0 -0
  503. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/client/supervisor_client.py +0 -0
  504. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/client/websocket_client.py +0 -0
  505. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/client/websocket_listener.py +0 -0
  506. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/config.py +0 -0
  507. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
  508. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
  509. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
  510. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
  511. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
  512. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
  513. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/errors.py +0 -0
  514. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/ha_request_queue.py +0 -0
  515. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/hacs_auto_refresh.py +0 -0
  516. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/http_transport.py +0 -0
  517. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/llm_exposure.py +0 -0
  518. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/log_filters.py +0 -0
  519. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/policy/__init__.py +0 -0
  520. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/policy/approval_queue.py +0 -0
  521. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/policy/editing.py +0 -0
  522. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/policy/evaluator.py +0 -0
  523. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/policy/handlers.py +0 -0
  524. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/policy/middleware.py +0 -0
  525. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/policy/model.py +0 -0
  526. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/policy/persistence.py +0 -0
  527. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/policy/value_sources.py +0 -0
  528. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/py.typed +0 -0
  529. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/read_only.py +0 -0
  530. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/redaction.py +0 -0
  531. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/renamed_tools.py +0 -0
  532. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
  533. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
  534. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
  535. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
  536. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/resources/skills-vendor/.github/pull_request_template.md +0 -0
  537. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
  538. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
  539. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
  540. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  541. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
  542. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/resources/skills-vendor/evals/area-target-over-entity-list/case.yaml +0 -0
  543. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/resources/skills-vendor/evals/arrive-home-automation/case.yaml +0 -0
  544. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/resources/skills-vendor/evals/assist-shortcut-card/case.yaml +0 -0
  545. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/resources/skills-vendor/evals/avg-temperature/case.yaml +0 -0
  546. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/resources/skills-vendor/evals/backup-deletion-confirmation/case.yaml +0 -0
  547. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/resources/skills-vendor/evals/blueprint-authoring/case.yaml +0 -0
  548. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/resources/skills-vendor/evals/button-event-entity/case.yaml +0 -0
  549. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/resources/skills-vendor/evals/device-id-trigger-migration/case.yaml +0 -0
  550. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/resources/skills-vendor/evals/helper-flow-fields-not-platform-yaml/case.yaml +0 -0
  551. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/resources/skills-vendor/evals/media-player-song/case.yaml +0 -0
  552. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/resources/skills-vendor/evals/motion-light-automation-mode/case.yaml +0 -0
  553. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/resources/skills-vendor/evals/rename-entity-impact-analysis/case.yaml +0 -0
  554. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/resources/skills-vendor/evals/template-attributes-yaml-exception/case.yaml +0 -0
  555. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/resources/skills-vendor/evals/timer-finished-automation/case.yaml +0 -0
  556. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/resources/skills-vendor/evals/vacuum-last-clean/case.yaml +0 -0
  557. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/resources/skills-vendor/scripts/check_eval_cases.py +0 -0
  558. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  559. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
  560. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
  561. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
  562. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
  563. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  564. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  565. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  566. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  567. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  568. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  569. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  570. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
  571. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  572. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
  573. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/server.py +0 -0
  574. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/settings_ui/__init__.py +0 -0
  575. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
  576. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
  577. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
  578. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
  579. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
  580. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
  581. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/settings_ui/_i18n.py +0 -0
  582. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
  583. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/settings_ui/_persistence.py +0 -0
  584. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
  585. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/settings_ui/_theme.py +0 -0
  586. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
  587. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/settings_ui/locales/README.md +0 -0
  588. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/settings_ui/locales/en.json +0 -0
  589. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
  590. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/settings_ui/settings.css +0 -0
  591. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/settings_ui/settings.html +0 -0
  592. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/settings_ui/settings.js +0 -0
  593. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/smoke_test.py +0 -0
  594. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  595. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/strict_bps.py +0 -0
  596. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tool_dispatch.py +0 -0
  597. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/__init__.py +0 -0
  598. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/auto_backup.py +0 -0
  599. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/backup.py +0 -0
  600. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  601. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/best_practice_result.py +0 -0
  602. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/best_practice_variables.py +0 -0
  603. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/blueprint_sources.py +0 -0
  604. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
  605. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/blueprint_write.py +0 -0
  606. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/bulk_selector.py +0 -0
  607. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/component_api.py +0 -0
  608. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/component_config_entries.py +0 -0
  609. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/component_config_reads.py +0 -0
  610. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
  611. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/component_devices.py +0 -0
  612. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/component_registries.py +0 -0
  613. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
  614. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/config_entry_flow.py +0 -0
  615. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
  616. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
  617. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
  618. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/config_entry_identity.py +0 -0
  619. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
  620. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
  621. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
  622. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/device_control.py +0 -0
  623. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/entity_registration.py +0 -0
  624. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/error_log_parsing.py +0 -0
  625. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/hacs_registration.py +0 -0
  626. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/helpers.py +0 -0
  627. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
  628. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/log_common.py +0 -0
  629. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/log_sources.py +0 -0
  630. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/log_sources_fault.py +0 -0
  631. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
  632. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/radio/__init__.py +0 -0
  633. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/radio/base.py +0 -0
  634. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/radio/matter.py +0 -0
  635. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/radio/thread.py +0 -0
  636. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/radio/zigbee.py +0 -0
  637. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/radio/zwave.py +0 -0
  638. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/reference_validator.py +0 -0
  639. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/registry.py +0 -0
  640. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
  641. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/scene_discovery.py +0 -0
  642. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  643. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  644. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  645. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
  646. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  647. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  648. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
  649. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  650. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  651. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  652. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
  653. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/tools_addons.py +0 -0
  654. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/tools_areas.py +0 -0
  655. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
  656. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  657. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  658. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/tools_camera.py +0 -0
  659. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/tools_categories.py +0 -0
  660. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/tools_code.py +0 -0
  661. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/tools_config_automations.py +0 -0
  662. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
  663. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  664. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
  665. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
  666. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
  667. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/tools_dev.py +0 -0
  668. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/tools_energy.py +0 -0
  669. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/tools_entities.py +0 -0
  670. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  671. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/tools_groups.py +0 -0
  672. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/tools_hacs.py +0 -0
  673. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/tools_history.py +0 -0
  674. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/tools_integrations.py +0 -0
  675. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/tools_labels.py +0 -0
  676. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/tools_logs.py +0 -0
  677. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/tools_radio.py +0 -0
  678. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/tools_registry.py +0 -0
  679. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/tools_resources.py +0 -0
  680. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/tools_search.py +0 -0
  681. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/tools_security_policy.py +0 -0
  682. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/tools_service.py +0 -0
  683. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/tools_services.py +0 -0
  684. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/tools_system.py +0 -0
  685. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/tools_themes.py +0 -0
  686. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/tools_todo.py +0 -0
  687. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/tools_traces.py +0 -0
  688. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/tools_updates.py +0 -0
  689. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/tools_utility.py +0 -0
  690. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  691. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  692. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
  693. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/tools_zones.py +0 -0
  694. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/util_helpers.py +0 -0
  695. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/tools/validation_middleware.py +0 -0
  696. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/transforms/__init__.py +0 -0
  697. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/transforms/categorized_search.py +0 -0
  698. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/transforms/component_search.py +0 -0
  699. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  700. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/transforms/write_tool_note.py +0 -0
  701. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/transport_security.py +0 -0
  702. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/update_check.py +0 -0
  703. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/utils/__init__.py +0 -0
  704. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/utils/config_hash.py +0 -0
  705. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/utils/config_write_lock.py +0 -0
  706. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/utils/dashboard_patch.py +0 -0
  707. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/utils/data_paths.py +0 -0
  708. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
  709. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/utils/domain_handlers.py +0 -0
  710. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/utils/entity_membership.py +0 -0
  711. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  712. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  713. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/utils/mcp_client_host.py +0 -0
  714. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/utils/operation_manager.py +0 -0
  715. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/utils/python_sandbox.py +0 -0
  716. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/utils/registry_update_lock.py +0 -0
  717. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/utils/skill_loader.py +0 -0
  718. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/utils/usage_logger.py +0 -0
  719. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/visibility/__init__.py +0 -0
  720. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/visibility/enforcement.py +0 -0
  721. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/visibility/model.py +0 -0
  722. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/visibility/persistence.py +0 -0
  723. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp/visibility/resolver.py +0 -0
  724. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp_dev.egg-info/SOURCES.txt +0 -0
  725. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
  726. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
  727. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
  728. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
  729. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/tests/__init__.py +0 -0
  730. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/tests/test_constants.py +0 -0
  731. {ha_mcp_dev-8.5.0.dev2694 → ha_mcp_dev-8.5.0.dev2699}/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.dev2694
3
+ Version: 8.5.0.dev2699
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.dev2694"
7
+ version = "8.5.0.dev2699"
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;
@@ -542,8 +542,8 @@
542
542
  "description": "Získat informace o štítku – vypsat všechny štítky nebo získat konkrétní podle ID."
543
543
  },
544
544
  "ha_config_get_scene": {
545
- "title": "Získat konfiguraci scény",
546
- "description": "Načíst konfiguraci scény Home Assistant."
545
+ "title": "Získat nebo najít scény",
546
+ "description": "Získejte kompletní konfiguraci scény nebo vyhledejte a seznamte scény bez scene_id."
547
547
  },
548
548
  "ha_config_get_script": {
549
549
  "title": "Získat konfiguraci skriptu",
@@ -599,7 +599,7 @@
599
599
  },
600
600
  "ha_config_set_calendar_event": {
601
601
  "title": "Vytvořit nebo aktualizovat událost kalendáře",
602
- "description": "Vytvořit novou událost v kalendáři."
602
+ "description": "Vytvořte novou událost v kalendáři nebo aktualizujte stávající."
603
603
  },
604
604
  "ha_config_set_category": {
605
605
  "title": "Vytvořit nebo aktualizovat kategorii",
@@ -573,8 +573,8 @@
573
573
  "description": "Zeigt Labels oder Details zu einem bestimmten Label."
574
574
  },
575
575
  "ha_config_get_scene": {
576
- "title": "Szene abrufen",
577
- "description": "Ruft die Konfiguration einer Home-Assistant-Szene ab."
576
+ "title": "Szenen abrufen oder finden",
577
+ "description": "Vollständige Konfiguration einer Szene abrufen oder Szenen ohne scene_id auflisten und durchsuchen."
578
578
  },
579
579
  "ha_config_get_script": {
580
580
  "title": "Skript abrufen",
@@ -630,7 +630,7 @@
630
630
  },
631
631
  "ha_config_set_calendar_event": {
632
632
  "title": "Kalenderereignis erstellen/aktualisieren",
633
- "description": "Erstellt ein neues oder aktualisiert ein bestehendes Kalenderereignis."
633
+ "description": "Ein neues Ereignis in einem Kalender erstellen oder ein bestehendes aktualisieren."
634
634
  },
635
635
  "ha_config_set_category": {
636
636
  "title": "Kategorie erstellen/aktualisieren",
@@ -542,8 +542,8 @@
542
542
  "description": "Akiru etikedan informon - listigu ĉiujn etikedojn aŭ akiru specifan per ID."
543
543
  },
544
544
  "ha_config_get_scene": {
545
- "title": "Akiri Scenan Agordon",
546
- "description": "Reakiru agordon de sceno de Home Assistant."
545
+ "title": "Ricevi aŭ trovi scenojn",
546
+ "description": "Ricevi la kompletan agordon de sceno, aŭ listigi kaj serĉi scenojn sen scene_id."
547
547
  },
548
548
  "ha_config_get_script": {
549
549
  "title": "Akiri Skriptan Agordon",
@@ -599,7 +599,7 @@
599
599
  },
600
600
  "ha_config_set_calendar_event": {
601
601
  "title": "Krei aŭ Ĝisdatigi Kalendaran Eventon",
602
- "description": "Kreu novan eventon en kalendaro."
602
+ "description": "Krei novan eventon en kalendaro, aŭ ĝisdatigi ekzistantan."
603
603
  },
604
604
  "ha_config_set_category": {
605
605
  "title": "Krei aŭ Ĝisdatigi Kategorion",
@@ -573,8 +573,8 @@
573
573
  "description": "Lista todas las etiquetas u obtiene una concreta por su ID."
574
574
  },
575
575
  "ha_config_get_scene": {
576
- "title": "Obtener configuración de escena",
577
- "description": "Consulta la configuración de una escena de Home Assistant."
576
+ "title": "Obtener o buscar escenas",
577
+ "description": "Obtiene la configuración completa de una escena, o lista y busca escenas sin scene_id."
578
578
  },
579
579
  "ha_config_get_script": {
580
580
  "title": "Obtener configuración de script",
@@ -630,7 +630,7 @@
630
630
  },
631
631
  "ha_config_set_calendar_event": {
632
632
  "title": "Crear o actualizar evento de calendario",
633
- "description": "Crea un evento nuevo en un calendario."
633
+ "description": "Crea un nuevo evento en un calendario o actualiza uno existente."
634
634
  },
635
635
  "ha_config_set_category": {
636
636
  "title": "Crear o actualizar categoría",
@@ -573,8 +573,8 @@
573
573
  "description": "Affiche les étiquettes ou les détails d'une étiquette spécifique."
574
574
  },
575
575
  "ha_config_get_scene": {
576
- "title": "Obtenir la scène",
577
- "description": "Récupère la configuration d'une scène Home Assistant."
576
+ "title": "Obtenir ou rechercher des scènes",
577
+ "description": "Obtenir la configuration complète d'une scène, ou lister et rechercher des scènes sans scene_id."
578
578
  },
579
579
  "ha_config_get_script": {
580
580
  "title": "Obtenir le script",
@@ -630,7 +630,7 @@
630
630
  },
631
631
  "ha_config_set_calendar_event": {
632
632
  "title": "Créer/mettre à jour un événement du calendrier",
633
- "description": "Crée un nouvel événement ou met à jour un événement de calendrier existant."
633
+ "description": "Créer un nouvel événement dans un calendrier ou mettre à jour un événement existant."
634
634
  },
635
635
  "ha_config_set_category": {
636
636
  "title": "Créer/mettre à jour la catégorie",
@@ -573,8 +573,8 @@
573
573
  "description": "Ottiene informazioni sulle etichette: le elenca tutte o ne restituisce una specifica per ID."
574
574
  },
575
575
  "ha_config_get_scene": {
576
- "title": "Ottieni la configurazione di una scena",
577
- "description": "Recupera la configurazione di una scena di Home Assistant."
576
+ "title": "Ottieni o trova scene",
577
+ "description": "Ottieni la configurazione completa di una scena, oppure elenca e cerca scene senza scene_id."
578
578
  },
579
579
  "ha_config_get_script": {
580
580
  "title": "Ottieni la configurazione di uno script",
@@ -630,7 +630,7 @@
630
630
  },
631
631
  "ha_config_set_calendar_event": {
632
632
  "title": "Crea o aggiorna un evento del calendario",
633
- "description": "Crea un nuovo evento in un calendario."
633
+ "description": "Crea un nuovo evento in un calendario o aggiorna uno esistente."
634
634
  },
635
635
  "ha_config_set_category": {
636
636
  "title": "Crea o aggiorna una categoria",
@@ -573,8 +573,8 @@
573
573
  "description": "라벨 정보를 가져옵니다. 전체 라벨을 나열하거나 ID로 하나를 확인합니다."
574
574
  },
575
575
  "ha_config_get_scene": {
576
- "title": "장면 설정 조회",
577
- "description": "Home Assistant 장면 설정을 가져옵니다."
576
+ "title": "장면 가져오기 또는 찾기",
577
+ "description": "장면의 전체 구성을 가져오거나, scene_id 없이 장면을 나열하고 검색합니다."
578
578
  },
579
579
  "ha_config_get_script": {
580
580
  "title": "스크립트 설정 조회",
@@ -630,7 +630,7 @@
630
630
  },
631
631
  "ha_config_set_calendar_event": {
632
632
  "title": "캘린더 일정 생성·수정",
633
- "description": "캘린더에 새 일정을 만듭니다."
633
+ "description": "캘린더에 새 일정을 만들거나 기존 일정을 업데이트합니다."
634
634
  },
635
635
  "ha_config_set_category": {
636
636
  "title": "카테고리 생성·수정",
@@ -542,8 +542,8 @@
542
542
  "description": "Haal labelinformatie op - lijst alle labels of haal een specifieke op via ID."
543
543
  },
544
544
  "ha_config_get_scene": {
545
- "title": "Haal Scène Config op",
546
- "description": "Haal de Home Assistant-scèneconfiguratie op."
545
+ "title": "Scènes ophalen of zoeken",
546
+ "description": "Haal de volledige configuratie van een scène op, of lijst en zoek scènes zonder scene_id."
547
547
  },
548
548
  "ha_config_get_script": {
549
549
  "title": "Haal Script Config op",
@@ -599,7 +599,7 @@
599
599
  },
600
600
  "ha_config_set_calendar_event": {
601
601
  "title": "Maak of Werk Kalendergebeurtenis bij",
602
- "description": "Maak een nieuwe gebeurtenis in een kalender."
602
+ "description": "Maak een nieuwe gebeurtenis aan in een kalender of werk een bestaande bij."
603
603
  },
604
604
  "ha_config_set_category": {
605
605
  "title": "Maak of Werk Categorie bij",
@@ -542,8 +542,8 @@
542
542
  "description": "Pobierz informacje o etykiecie - wyświetl wszystkie etykiety lub pobierz konkretną po ID."
543
543
  },
544
544
  "ha_config_get_scene": {
545
- "title": "Pobierz konfigurację sceny",
546
- "description": "Pobierz konfigurację sceny Home Assistant."
545
+ "title": "Pobierz lub znajdź sceny",
546
+ "description": "Pobierz pełną konfigurację sceny lub wyświetl listę i wyszukaj sceny bez użycia scene_id."
547
547
  },
548
548
  "ha_config_get_script": {
549
549
  "title": "Pobierz konfigurację skryptu",
@@ -599,7 +599,7 @@
599
599
  },
600
600
  "ha_config_set_calendar_event": {
601
601
  "title": "Utwórz lub zaktualizuj wydarzenie w kalendarzu",
602
- "description": "Utwórz nowe wydarzenie w kalendarzu."
602
+ "description": "Utwórz nowe wydarzenie w kalendarzu lub zaktualizuj istniejące."
603
603
  },
604
604
  "ha_config_set_category": {
605
605
  "title": "Utwórz lub zaktualizuj kategorię",
@@ -573,8 +573,8 @@
573
573
  "description": "Показать метки или сведения о конкретной метке."
574
574
  },
575
575
  "ha_config_get_scene": {
576
- "title": "Получить сцену",
577
- "description": "Получить конфигурацию сцены Home Assistant."
576
+ "title": "Получить или найти сцены",
577
+ "description": "Получить полную конфигурацию сцены либо получить список и выполнить поиск сцен без использования scene_id."
578
578
  },
579
579
  "ha_config_get_script": {
580
580
  "title": "Получить скрипт",
@@ -630,7 +630,7 @@
630
630
  },
631
631
  "ha_config_set_calendar_event": {
632
632
  "title": "Создать или изменить событие",
633
- "description": "Создать новое или обновить событие календаря."
633
+ "description": "Создать новое событие в календаре или обновить существующее."
634
634
  },
635
635
  "ha_config_set_category": {
636
636
  "title": "Создать или изменить категорию",
@@ -542,8 +542,8 @@
542
542
  "description": "Hämta etikettinformation - lista alla etiketter eller hämta en specifik med ID."
543
543
  },
544
544
  "ha_config_get_scene": {
545
- "title": "Hämta Scenkonfiguration",
546
- "description": "Hämta Home Assistant-scenkonfiguration."
545
+ "title": "Hämta eller hitta scener",
546
+ "description": "Hämta en scens kompletta konfiguration, eller lista och sök efter scener utan scene_id."
547
547
  },
548
548
  "ha_config_get_script": {
549
549
  "title": "Hämta Skriptkonfiguration",
@@ -599,7 +599,7 @@
599
599
  },
600
600
  "ha_config_set_calendar_event": {
601
601
  "title": "Skapa eller Uppdatera Kalenderhändelse",
602
- "description": "Skapa en ny händelse i en kalender."
602
+ "description": "Skapa en ny händelse i en kalender eller uppdatera en befintlig."
603
603
  },
604
604
  "ha_config_set_category": {
605
605
  "title": "Skapa eller Uppdatera Kategori",
@@ -573,8 +573,8 @@
573
573
  "description": "获取标签信息——列出所有标签或按 ID 查看特定标签。"
574
574
  },
575
575
  "ha_config_get_scene": {
576
- "title": "获取场景配置",
577
- "description": "获取 Home Assistant 场景配置。"
576
+ "title": "获取或查找场景",
577
+ "description": "获取场景的完整配置,或者在不提供 scene_id 的情况下列出并搜索场景。"
578
578
  },
579
579
  "ha_config_get_script": {
580
580
  "title": "获取脚本配置",
@@ -630,7 +630,7 @@
630
630
  },
631
631
  "ha_config_set_calendar_event": {
632
632
  "title": "创建或更新日历事件",
633
- "description": "在日历中创建新事件。"
633
+ "description": "在日历中创建新事件,或更新现有事件。"
634
634
  },
635
635
  "ha_config_set_category": {
636
636
  "title": "创建或更新类别",
@@ -542,8 +542,8 @@
542
542
  "description": "取得標籤資訊 - 列出所有標籤,或透過 ID 取得特定標籤。"
543
543
  },
544
544
  "ha_config_get_scene": {
545
- "title": "取得場景設定",
546
- "description": "擷取 Home Assistant 場景設定。"
545
+ "title": "取得或尋找場景",
546
+ "description": "取得場景的完整設定,或在沒有 scene_id 的情況下列出並搜尋場景。"
547
547
  },
548
548
  "ha_config_get_script": {
549
549
  "title": "取得腳本設定",
@@ -599,7 +599,7 @@
599
599
  },
600
600
  "ha_config_set_calendar_event": {
601
601
  "title": "建立或更新行事曆事件",
602
- "description": "在行事曆中建立新事件。"
602
+ "description": "在行事曆中建立新事件,或更新現有事件。"
603
603
  },
604
604
  "ha_config_set_category": {
605
605
  "title": "建立或更新分類",