ha-mcp-dev 9.1.1.dev3362__tar.gz → 9.1.1.dev3368__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 (838) hide show
  1. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/PKG-INFO +1 -1
  2. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/pyproject.toml +1 -1
  3. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/pyproject.toml.orig +1 -1
  4. ha_mcp_dev-9.1.1.dev3368/src/ha_mcp/backup_calendar.py +283 -0
  5. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/backup_manager.py +2 -271
  6. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/settings_ui/locales/az.json +1 -0
  7. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/settings_ui/locales/cs.json +1 -0
  8. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/settings_ui/locales/de.json +1 -0
  9. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/settings_ui/locales/eo.json +1 -0
  10. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/settings_ui/locales/es.json +1 -0
  11. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/settings_ui/locales/fr.json +1 -0
  12. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/settings_ui/locales/hu.json +1 -0
  13. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/settings_ui/locales/it.json +1 -0
  14. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/settings_ui/locales/ko.json +1 -0
  15. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/settings_ui/locales/nl.json +1 -0
  16. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/settings_ui/locales/pl.json +1 -0
  17. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/settings_ui/locales/ru.json +1 -0
  18. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/settings_ui/locales/sv.json +1 -0
  19. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/settings_ui/locales/zh-Hans.json +1 -0
  20. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/settings_ui/locales/zh-Hant.json +1 -0
  21. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/LICENSE +0 -0
  22. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/README.md +0 -0
  23. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/__init__.py +0 -0
  24. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/__main__.py +0 -0
  25. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_pypi_marker +0 -0
  26. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_rich_compat.py +0 -0
  27. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/__init__.py +0 -0
  28. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
  29. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
  30. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
  31. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
  32. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
  33. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
  34. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
  35. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
  36. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
  37. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
  38. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
  39. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
  40. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
  41. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
  42. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
  43. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
  44. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
  45. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
  46. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
  47. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev_security.py +0 -0
  48. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
  49. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
  50. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
  51. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
  52. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
  53. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
  54. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
  55. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
  56. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
  57. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
  58. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
  59. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
  60. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
  61. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
  62. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
  63. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
  64. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
  65. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
  66. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
  67. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
  68. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
  69. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
  70. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
  71. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
  72. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
  73. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
  74. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
  75. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
  76. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
  77. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
  78. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
  79. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
  80. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
  81. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
  82. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
  83. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
  84. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
  85. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
  86. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
  87. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
  88. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
  89. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/client/mixins/skills.py +0 -0
  90. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
  91. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
  92. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
  93. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
  94. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
  95. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
  96. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
  97. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
  98. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
  99. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
  100. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
  101. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
  102. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
  103. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
  104. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
  105. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
  106. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
  107. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
  108. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
  109. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
  110. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
  111. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
  112. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
  113. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
  114. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
  115. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
  116. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
  117. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
  118. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
  119. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
  120. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
  121. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
  122. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
  123. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
  124. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
  125. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
  126. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
  127. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/jev_search.py +0 -0
  128. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
  129. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
  130. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
  131. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
  132. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
  133. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
  134. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
  135. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
  136. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
  137. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
  138. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
  139. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
  140. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
  141. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
  142. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
  143. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
  144. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
  145. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
  146. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
  147. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
  148. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
  149. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
  150. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
  151. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
  152. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
  153. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
  154. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
  155. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
  156. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
  157. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
  158. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
  159. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
  160. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
  161. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
  162. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
  163. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
  164. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
  165. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
  166. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
  167. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
  168. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
  169. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
  170. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
  171. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
  172. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
  173. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
  174. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
  175. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
  176. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
  177. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
  178. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
  179. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
  180. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
  181. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
  182. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
  183. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
  184. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
  185. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
  186. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
  187. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
  188. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
  189. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
  190. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
  191. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
  192. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
  193. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
  194. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
  195. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
  196. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
  197. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
  198. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
  199. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
  200. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/mixins/extensions.py +0 -0
  201. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
  202. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
  203. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
  204. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
  205. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
  206. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
  207. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
  208. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
  209. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
  210. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
  211. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
  212. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
  213. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
  214. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
  215. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
  216. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
  217. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
  218. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
  219. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
  220. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
  221. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
  222. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
  223. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
  224. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
  225. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
  226. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
  227. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
  228. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
  229. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
  230. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
  231. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
  232. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
  233. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
  234. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
  235. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
  236. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
  237. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
  238. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
  239. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
  240. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
  241. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
  242. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
  243. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
  244. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
  245. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
  246. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
  247. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
  248. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
  249. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/skills/__init__.py +0 -0
  250. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/skills/_constants.py +0 -0
  251. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/skills/_resources.py +0 -0
  252. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/skills/_snapshot.py +0 -0
  253. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/skills/_source.py +0 -0
  254. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/skills/client.py +0 -0
  255. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/skills/extension.py +0 -0
  256. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/skills/models.py +0 -0
  257. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
  258. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
  259. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
  260. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
  261. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
  262. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
  263. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
  264. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
  265. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
  266. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
  267. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
  268. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
  269. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
  270. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
  271. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
  272. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
  273. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
  274. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
  275. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
  276. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
  277. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
  278. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
  279. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
  280. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
  281. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
  282. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
  283. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
  284. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
  285. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
  286. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
  287. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
  288. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
  289. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
  290. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
  291. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
  292. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
  293. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
  294. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
  295. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
  296. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
  297. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
  298. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
  299. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
  300. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
  301. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
  302. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
  303. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
  304. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
  305. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
  306. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
  307. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
  308. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
  309. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
  310. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
  311. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
  312. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
  313. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
  314. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
  315. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
  316. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
  317. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
  318. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
  319. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
  320. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
  321. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
  322. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
  323. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
  324. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
  325. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
  326. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
  327. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
  328. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
  329. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
  330. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
  331. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
  332. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
  333. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
  334. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
  335. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
  336. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
  337. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
  338. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
  339. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
  340. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
  341. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
  342. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
  343. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
  344. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
  345. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
  346. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
  347. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
  348. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
  349. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
  350. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
  351. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
  352. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
  353. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
  354. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
  355. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
  356. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
  357. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
  358. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
  359. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
  360. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
  361. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
  362. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
  363. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
  364. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
  365. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
  366. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
  367. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
  368. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
  369. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
  370. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
  371. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
  372. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
  373. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
  374. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
  375. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
  376. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
  377. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
  378. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
  379. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
  380. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
  381. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
  382. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
  383. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
  384. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
  385. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
  386. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
  387. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
  388. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
  389. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
  390. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
  391. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
  392. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
  393. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
  394. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
  395. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
  396. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
  397. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
  398. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
  399. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
  400. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
  401. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
  402. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
  403. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
  404. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
  405. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
  406. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
  407. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
  408. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
  409. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
  410. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
  411. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
  412. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
  413. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
  414. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/shared/_request_clock.py +0 -0
  415. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
  416. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
  417. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
  418. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
  419. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
  420. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
  421. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
  422. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
  423. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
  424. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
  425. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
  426. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
  427. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
  428. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
  429. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
  430. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
  431. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
  432. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
  433. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
  434. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
  435. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
  436. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
  437. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
  438. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
  439. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
  440. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
  441. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
  442. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
  443. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
  444. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
  445. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
  446. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
  447. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
  448. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
  449. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
  450. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
  451. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/requirements.txt +0 -0
  452. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
  453. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
  454. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
  455. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
  456. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
  457. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
  458. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
  459. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
  460. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
  461. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
  462. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
  463. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
  464. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
  465. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/client.py +0 -0
  466. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
  467. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
  468. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
  469. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
  470. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
  471. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
  472. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
  473. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
  474. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
  475. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
  476. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
  477. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
  478. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
  479. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
  480. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
  481. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
  482. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
  483. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
  484. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
  485. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
  486. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
  487. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
  488. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/server.py +0 -0
  489. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
  490. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
  491. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
  492. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
  493. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
  494. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
  495. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
  496. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
  497. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
  498. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
  499. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
  500. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
  501. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
  502. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
  503. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
  504. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
  505. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
  506. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
  507. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_vendor/websockets/version.py +0 -0
  508. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/_version.py +0 -0
  509. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/app_discovery.py +0 -0
  510. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/auth/__init__.py +0 -0
  511. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/auth/consent_form.py +0 -0
  512. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/auth/iss_stamp.py +0 -0
  513. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/auth/oidc_compat.py +0 -0
  514. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/auth/provider.py +0 -0
  515. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/backup_dashboards.py +0 -0
  516. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/backup_diff.py +0 -0
  517. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/backup_entities.py +0 -0
  518. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/backup_entity_ids.py +0 -0
  519. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/backup_helper_target.py +0 -0
  520. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/backup_integrations.py +0 -0
  521. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/backup_tags.py +0 -0
  522. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/backup_todo.py +0 -0
  523. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/backup_zones.py +0 -0
  524. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/browser_landing.py +0 -0
  525. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/client/__init__.py +0 -0
  526. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/client/admin_routes.py +0 -0
  527. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/client/error_log_journald.py +0 -0
  528. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/client/event_listeners.py +0 -0
  529. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/client/models.py +0 -0
  530. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/client/rest_client.py +0 -0
  531. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/client/supervisor_client.py +0 -0
  532. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/client/websocket_client.py +0 -0
  533. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/client/websocket_listener.py +0 -0
  534. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/config.py +0 -0
  535. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/config_backup.py +0 -0
  536. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/config_meta.py +0 -0
  537. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/config_overrides.py +0 -0
  538. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/config_registry.py +0 -0
  539. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/config_settings.py +0 -0
  540. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
  541. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
  542. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
  543. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/dashboard_screenshot/engine_compat.py +0 -0
  544. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
  545. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
  546. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/dashboard_screenshot/theme_check.py +0 -0
  547. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
  548. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/errors.py +0 -0
  549. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/ha_request_queue.py +0 -0
  550. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/hacs_auto_refresh.py +0 -0
  551. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/http_transport.py +0 -0
  552. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/image_info.py +0 -0
  553. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/ipv6_lan_guard.py +0 -0
  554. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/listen_sockets.py +0 -0
  555. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/llm_exposure.py +0 -0
  556. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/log_filters.py +0 -0
  557. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/mcp_client_context.py +0 -0
  558. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/policy/__init__.py +0 -0
  559. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/policy/approval_queue.py +0 -0
  560. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/policy/decision_pin.py +0 -0
  561. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/policy/decisions.py +0 -0
  562. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/policy/editing.py +0 -0
  563. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/policy/evaluator.py +0 -0
  564. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/policy/events.py +0 -0
  565. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/policy/handlers.py +0 -0
  566. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/policy/middleware.py +0 -0
  567. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/policy/model.py +0 -0
  568. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/policy/mrtr.py +0 -0
  569. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/policy/persistence.py +0 -0
  570. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/policy/server_channels.py +0 -0
  571. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/policy/value_sources.py +0 -0
  572. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/py.typed +0 -0
  573. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/read_only.py +0 -0
  574. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/redaction.py +0 -0
  575. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/renamed_tools.py +0 -0
  576. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  577. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  578. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
  579. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-actions.md +0 -0
  580. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
  581. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
  582. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  583. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  584. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  585. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  586. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  587. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  588. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  589. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
  590. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  591. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/triggers-and-conditions.md +0 -0
  592. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
  593. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/server.py +0 -0
  594. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/server_instructions.py +0 -0
  595. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/server_lifespan.py +0 -0
  596. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/server_tool_text.py +0 -0
  597. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/settings_ui/__init__.py +0 -0
  598. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
  599. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
  600. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
  601. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/settings_ui/_handlers_oauth_callbacks.py +0 -0
  602. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
  603. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
  604. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
  605. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/settings_ui/_i18n.py +0 -0
  606. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
  607. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/settings_ui/_persistence.py +0 -0
  608. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
  609. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/settings_ui/_theme.py +0 -0
  610. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
  611. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/settings_ui/locales/README.md +0 -0
  612. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/settings_ui/locales/en.json +0 -0
  613. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
  614. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/settings_ui/settings.css +0 -0
  615. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/settings_ui/settings.html +0 -0
  616. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/settings_ui/settings_js/01_i18n_state.js +0 -0
  617. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/settings_ui/settings_js/02_tools_restart.js +0 -0
  618. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/settings_ui/settings_js/03_render_save.js +0 -0
  619. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/settings_ui/settings_js/04_backups.js +0 -0
  620. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/settings_ui/settings_js/05_feature_flags.js +0 -0
  621. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/settings_ui/settings_js/06_policy_cards.js +0 -0
  622. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/settings_ui/settings_js/07_policy_actions.js +0 -0
  623. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/settings_ui/settings_js/08_advanced.js +0 -0
  624. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/settings_ui/settings_js/09_prefs_visibility.js +0 -0
  625. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/settings_ui/settings_js/10_oauth_callbacks.js +0 -0
  626. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/smoke_test.py +0 -0
  627. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  628. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/storage_helper_types.py +0 -0
  629. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/strict_bps.py +0 -0
  630. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tool_catalog.py +0 -0
  631. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tool_dispatch.py +0 -0
  632. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/__init__.py +0 -0
  633. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/addon_connection_hints.py +0 -0
  634. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/area_messages.py +0 -0
  635. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/auto_backup.py +0 -0
  636. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/automation_errors.py +0 -0
  637. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/backup.py +0 -0
  638. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/backup_access.py +0 -0
  639. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/backup_on_demand.py +0 -0
  640. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/backup_snapshot.py +0 -0
  641. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/backup_snapshot_restore.py +0 -0
  642. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  643. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/best_practice_result.py +0 -0
  644. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/best_practice_variables.py +0 -0
  645. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/blueprint_sources.py +0 -0
  646. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
  647. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/blueprint_write.py +0 -0
  648. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/bug_report_config.py +0 -0
  649. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/bug_report_redaction.py +0 -0
  650. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/bug_report_sources.py +0 -0
  651. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/bug_report_templates.py +0 -0
  652. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/bulk_selector.py +0 -0
  653. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/coercion.py +0 -0
  654. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/component_api.py +0 -0
  655. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/component_automation.py +0 -0
  656. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/component_config_entries.py +0 -0
  657. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/component_config_reads.py +0 -0
  658. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
  659. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/component_devices.py +0 -0
  660. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/component_helper_collections.py +0 -0
  661. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/component_registries.py +0 -0
  662. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
  663. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/component_todo.py +0 -0
  664. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/config_entry_backup.py +0 -0
  665. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/config_entry_flow.py +0 -0
  666. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
  667. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/config_entry_flow_introspect.py +0 -0
  668. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
  669. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
  670. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/config_entry_identity.py +0 -0
  671. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
  672. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
  673. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/config_file_visibility.py +0 -0
  674. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/config_helpers/__init__.py +0 -0
  675. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/config_helpers/core_payload.py +0 -0
  676. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/config_helpers/create.py +0 -0
  677. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/config_helpers/describe.py +0 -0
  678. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/config_helpers/flow.py +0 -0
  679. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/config_helpers/icon_route.py +0 -0
  680. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/config_helpers/listing.py +0 -0
  681. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/config_helpers/registry.py +0 -0
  682. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/config_helpers/schemas.py +0 -0
  683. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/config_helpers/typed_config.py +0 -0
  684. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/config_helpers/update.py +0 -0
  685. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/config_helpers/validation.py +0 -0
  686. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/config_subentry_restore.py +0 -0
  687. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/config_write_errors.py +0 -0
  688. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/config_write_helpers.py +0 -0
  689. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/core_contract.py +0 -0
  690. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/dashboard_card_describe.py +0 -0
  691. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
  692. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/dashboard_list_checks.py +0 -0
  693. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/dashboard_read_errors.py +0 -0
  694. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/dev_backup.py +0 -0
  695. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/device_control.py +0 -0
  696. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/device_enrichment.py +0 -0
  697. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/diagnostics_helpers.py +0 -0
  698. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/energy_preferences.py +0 -0
  699. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/entity_expose_batch.py +0 -0
  700. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/entity_param_parsing.py +0 -0
  701. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/entity_registration.py +0 -0
  702. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/entity_removal.py +0 -0
  703. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/entity_update_fields.py +0 -0
  704. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/error_log_parsing.py +0 -0
  705. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/event_call.py +0 -0
  706. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/event_listener_fields.py +0 -0
  707. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/flow_helper_lookup.py +0 -0
  708. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/hacs_backend.py +0 -0
  709. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/hacs_registration.py +0 -0
  710. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/helper_flows.py +0 -0
  711. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/helpers.py +0 -0
  712. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/history_response.py +0 -0
  713. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/integration_entry_state.py +0 -0
  714. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
  715. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/log_common.py +0 -0
  716. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/log_sources.py +0 -0
  717. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/log_sources_fault.py +0 -0
  718. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/log_sources_logbook.py +0 -0
  719. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
  720. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/radio/__init__.py +0 -0
  721. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/radio/base.py +0 -0
  722. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/radio/matter.py +0 -0
  723. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/radio/thread.py +0 -0
  724. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/radio/zigbee.py +0 -0
  725. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/radio/zwave.py +0 -0
  726. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/radio/zwave_parameters.py +0 -0
  727. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/recorder_errors.py +0 -0
  728. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/reference_validator.py +0 -0
  729. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/registry.py +0 -0
  730. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
  731. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/resource_codec.py +0 -0
  732. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/resource_patch.py +0 -0
  733. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/response_helpers.py +0 -0
  734. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/scene_discovery.py +0 -0
  735. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/search/__init__.py +0 -0
  736. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/search/base.py +0 -0
  737. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/search/component.py +0 -0
  738. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/search/entities.py +0 -0
  739. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/search/legacy.py +0 -0
  740. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/search/modes.py +0 -0
  741. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/search/overview.py +0 -0
  742. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/search/response.py +0 -0
  743. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/search/state.py +0 -0
  744. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/server_version.py +0 -0
  745. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  746. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  747. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  748. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
  749. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  750. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  751. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
  752. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  753. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  754. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  755. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/statistics_calendar.py +0 -0
  756. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/statistics_helpers.py +0 -0
  757. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/statistics_resets.py +0 -0
  758. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/system_restart.py +0 -0
  759. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/tool_hints.py +0 -0
  760. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
  761. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/tools_addons.py +0 -0
  762. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/tools_areas.py +0 -0
  763. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
  764. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  765. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  766. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/tools_calendar.py +0 -0
  767. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/tools_camera.py +0 -0
  768. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/tools_categories.py +0 -0
  769. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/tools_code.py +0 -0
  770. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/tools_config_automations.py +0 -0
  771. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
  772. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  773. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
  774. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
  775. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
  776. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/tools_dev.py +0 -0
  777. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/tools_energy.py +0 -0
  778. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/tools_entities.py +0 -0
  779. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  780. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/tools_groups.py +0 -0
  781. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/tools_hacs.py +0 -0
  782. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/tools_history.py +0 -0
  783. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/tools_integrations.py +0 -0
  784. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/tools_labels.py +0 -0
  785. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/tools_logs.py +0 -0
  786. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/tools_radio.py +0 -0
  787. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/tools_registry.py +0 -0
  788. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/tools_resources.py +0 -0
  789. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/tools_search.py +0 -0
  790. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/tools_security_policy.py +0 -0
  791. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/tools_service.py +0 -0
  792. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/tools_services.py +0 -0
  793. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/tools_system.py +0 -0
  794. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/tools_themes.py +0 -0
  795. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/tools_todo.py +0 -0
  796. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/tools_traces.py +0 -0
  797. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/tools_updates.py +0 -0
  798. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/tools_utility.py +0 -0
  799. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  800. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  801. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
  802. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/tools_zones.py +0 -0
  803. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/update_categories.py +0 -0
  804. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/util_helpers.py +0 -0
  805. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/validation_middleware.py +0 -0
  806. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/tools/ws_waiters.py +0 -0
  807. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/transforms/__init__.py +0 -0
  808. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/transforms/categorized_search.py +0 -0
  809. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/transforms/compact_params.py +0 -0
  810. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/transforms/component_helpers.py +0 -0
  811. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/transforms/component_search.py +0 -0
  812. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  813. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/transforms/write_tool_note.py +0 -0
  814. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/transport_security.py +0 -0
  815. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/update_check.py +0 -0
  816. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/utils/__init__.py +0 -0
  817. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/utils/config_hash.py +0 -0
  818. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/utils/config_write_lock.py +0 -0
  819. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/utils/dashboard_patch.py +0 -0
  820. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/utils/data_paths.py +0 -0
  821. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
  822. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/utils/domain_handlers.py +0 -0
  823. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/utils/entity_membership.py +0 -0
  824. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  825. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  826. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/utils/mcp_client_host.py +0 -0
  827. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/utils/operation_manager.py +0 -0
  828. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/utils/python_sandbox.py +0 -0
  829. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/utils/registry_update_lock.py +0 -0
  830. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/utils/skill_loader.py +0 -0
  831. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/utils/usage_logger.py +0 -0
  832. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/visibility/__init__.py +0 -0
  833. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/visibility/config_files.py +0 -0
  834. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/visibility/enforcement.py +0 -0
  835. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/visibility/identifier_aliases.py +0 -0
  836. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/visibility/model.py +0 -0
  837. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/visibility/persistence.py +0 -0
  838. {ha_mcp_dev-9.1.1.dev3362 → ha_mcp_dev-9.1.1.dev3368}/src/ha_mcp/visibility/resolver.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ha-mcp-dev
3
- Version: 9.1.1.dev3362
3
+ Version: 9.1.1.dev3368
4
4
  Summary: Home Assistant MCP Server - Complete control of Home Assistant through MCP
5
5
  Keywords: mcp,home-assistant,ai,automation,smart-home
6
6
  Author: Julien
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "9.1.1.dev3362"
7
+ version = "9.1.1.dev3368"
8
8
  description = "Home Assistant MCP Server - Complete control of Home Assistant through MCP"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13,<3.15"
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "9.1.1.dev3362"
7
+ version = "9.1.1.dev3368"
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
@@ -0,0 +1,283 @@
1
+ """Auto-backup handlers for calendar events.
2
+
3
+ A snapshot holds one event (or one occurrence) read from the calendar view; a
4
+ restore puts it back in place by uid, or re-creates a deleted event.
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ import logging
10
+ from datetime import UTC, datetime, timedelta
11
+ from typing import Any
12
+
13
+ from .backup_entity_ids import _manager
14
+ from .client.rest_client import HomeAssistantCommandError, HomeAssistantError
15
+
16
+ logger = logging.getLogger(__name__)
17
+
18
+
19
+ # Wide enough for past and far-booked events without expanding years of recurrences.
20
+ _CALENDAR_WIDE_LOOKBACK_DAYS = 366
21
+ _CALENDAR_WIDE_LOOKAHEAD_DAYS = 732
22
+
23
+
24
+ async def _find_calendar_event(
25
+ client: Any,
26
+ cal: str,
27
+ uid: str,
28
+ recurrence_id: str | None,
29
+ start: datetime,
30
+ end: datetime,
31
+ ) -> Any:
32
+ """The ``uid`` event (occurrence ``recurrence_id``) on ``cal`` in the window.
33
+
34
+ The REST calendar view, not ``calendar.get_events``: the service drops uid.
35
+ """
36
+ try:
37
+ events = await client._request(
38
+ "GET",
39
+ f"/calendars/{cal}",
40
+ params={"start": start.isoformat(), "end": end.isoformat()},
41
+ )
42
+ except HomeAssistantError as err:
43
+ # 404: the calendar integration is not loaded.
44
+ if getattr(err, "status_code", None) == 404:
45
+ return None
46
+ raise
47
+ for event in _manager()._require_list(events, f"/calendars/{cal}"):
48
+ if not isinstance(event, dict) or event.get("uid") != uid:
49
+ continue
50
+ if recurrence_id is not None and event.get("recurrence_id") != recurrence_id:
51
+ continue
52
+ return event
53
+ return None
54
+
55
+
56
+ def _day_window(value: str | None) -> tuple[datetime, datetime] | None:
57
+ """A day either side of a recurrence id or ISO date(-time), if it parses."""
58
+ try:
59
+ at = datetime.fromisoformat(value or "")
60
+ except ValueError:
61
+ return None
62
+ at = at if at.tzinfo else at.replace(tzinfo=UTC)
63
+ return at - timedelta(days=1), at + timedelta(days=1)
64
+
65
+
66
+ async def _locate_calendar_event(
67
+ client: Any, cal: str, uid: str, wanted: str | None, near: str | None = None
68
+ ) -> Any:
69
+ """The ``uid`` event (occurrence ``wanted``) on ``cal``; None if no window has it.
70
+
71
+ Out-of-window events and cancelled ones Local Calendar hides also read as None.
72
+ """
73
+ try:
74
+ from .config import get_global_settings
75
+
76
+ days = int(
77
+ getattr(get_global_settings(), "auto_backup_calendar_lookahead_days", 7)
78
+ )
79
+ except (AttributeError, ImportError, ValueError, TypeError):
80
+ days = 7
81
+ days = max(1, min(365, days))
82
+ now = datetime.now(UTC)
83
+ # A recurrence_id names the occurrence's date; without one, ``near`` (the
84
+ # snapshot's start) places the request that finds an event the windows
85
+ # below would miss.
86
+ around = _day_window(wanted) or _day_window(near)
87
+ found = (
88
+ await _find_calendar_event(client, cal, uid, wanted, *around)
89
+ if around
90
+ else None
91
+ )
92
+ if found is None:
93
+ found = await _find_calendar_event(
94
+ client, cal, uid, wanted, now, now + timedelta(days=days)
95
+ )
96
+ if found is None:
97
+ # A missed event would skip the snapshot or be re-created on restore.
98
+ found = await _find_calendar_event(
99
+ client,
100
+ cal,
101
+ uid,
102
+ wanted,
103
+ now - timedelta(days=_CALENDAR_WIDE_LOOKBACK_DAYS),
104
+ now + timedelta(days=_CALENDAR_WIDE_LOOKAHEAD_DAYS),
105
+ )
106
+ return found
107
+
108
+
109
+ async def _fetch_calendar_event(client: Any, entity_id: str) -> Any:
110
+ # "<calendar.entity>::<event_uid>[::<recurrence_id>]"
111
+ cal, _, rest = entity_id.partition("::")
112
+ uid, _, recurrence_id = rest.partition("::")
113
+ if not cal or not uid:
114
+ return None
115
+ wanted = recurrence_id or None
116
+ found = await _locate_calendar_event(client, cal, uid, wanted)
117
+ if found is None:
118
+ return None
119
+ if wanted is None and found.get("rrule"):
120
+ # The view shows only expanded occurrences, never the series itself,
121
+ # so a series-wide write cannot be restored faithfully.
122
+ logger.warning(
123
+ "Auto-backup: no snapshot for series-wide write on %s (event %s); "
124
+ "Home Assistant exposes only expanded occurrences, so the series "
125
+ "could not be restored faithfully",
126
+ cal,
127
+ uid,
128
+ )
129
+ return None
130
+ return {"calendar_entity_id": cal, **found}
131
+
132
+
133
+ def _calendar_bound(value: Any) -> tuple[str, bool] | None:
134
+ """``(iso_value, is_date_only)``; older snapshots hold a flat ISO string."""
135
+ if isinstance(value, dict):
136
+ if value.get("dateTime"):
137
+ return str(value["dateTime"]), False
138
+ if value.get("date"):
139
+ return str(value["date"]), True
140
+ return None
141
+ if isinstance(value, str) and value:
142
+ return value, len(value) == 10
143
+ return None
144
+
145
+
146
+ def _same_bound(found: tuple[str, bool] | None, wanted: tuple[str, bool]) -> bool:
147
+ """Equal bounds: timed ones by instant, or by wall clock, which Local
148
+ Calendar's floating times keep across a timezone change."""
149
+ if found is None or found[1] != wanted[1]:
150
+ return False
151
+ if found[1] or found[0] == wanted[0]:
152
+ return found[0] == wanted[0]
153
+ at, want = datetime.fromisoformat(found[0]), datetime.fromisoformat(wanted[0])
154
+ if at.replace(tzinfo=None) == want.replace(tzinfo=None):
155
+ return True
156
+ return at.tzinfo is not None and want.tzinfo is not None and at == want
157
+
158
+
159
+ async def _restored_copy(
160
+ client: Any,
161
+ cal: str,
162
+ event: dict[str, Any],
163
+ start: tuple[str, bool],
164
+ end: tuple[str, bool],
165
+ ) -> dict[str, Any] | None:
166
+ """The copy an earlier restore re-created: same summary, times and text.
167
+
168
+ A re-created event gets a new uid, so its snapshot's uid stays gone. A day
169
+ either side covers a timezone change since the copy was made.
170
+ """
171
+ first, last = (
172
+ datetime.fromisoformat(f"{value}T00:00:00" if date_only else value)
173
+ for value, date_only in (start, end)
174
+ )
175
+ try:
176
+ events = await client._request(
177
+ "GET",
178
+ f"/calendars/{cal}",
179
+ params={
180
+ "start": (first - timedelta(days=1)).isoformat(),
181
+ "end": (last + timedelta(days=1)).isoformat(),
182
+ },
183
+ )
184
+ except HomeAssistantError as err:
185
+ if getattr(err, "status_code", None) == 404:
186
+ return None
187
+ raise
188
+ for found in _manager()._require_list(events, f"/calendars/{cal}"):
189
+ if (
190
+ isinstance(found, dict)
191
+ and _same_bound(_calendar_bound(found.get("start")), start)
192
+ and _same_bound(_calendar_bound(found.get("end")), end)
193
+ and all(
194
+ (found.get(key) or "") == event[key]
195
+ for key in ("summary", "description", "location")
196
+ )
197
+ ):
198
+ return found
199
+ return None
200
+
201
+
202
+ async def _recreate_calendar_event(
203
+ client: Any,
204
+ cal: str,
205
+ event: dict[str, Any],
206
+ start: tuple[str, bool],
207
+ end: tuple[str, bool],
208
+ ) -> Any:
209
+ """Re-create a deleted event, always as a single event."""
210
+ if (copy := await _restored_copy(client, cal, event, start, end)) is not None:
211
+ return {"already_restored": True, "event": copy}
212
+ data: dict[str, Any] = {"entity_id": cal, "summary": event["summary"]}
213
+ if start[1]:
214
+ data.update({"start_date": start[0], "end_date": end[0]})
215
+ else:
216
+ data.update({"start_date_time": start[0], "end_date_time": end[0]})
217
+ for key in ("description", "location"):
218
+ if event.get(key):
219
+ data[key] = event[key]
220
+ return await _manager()._rest_post(client, "services/calendar/create_event", data)
221
+
222
+
223
+ async def _restore_calendar_event(client: Any, entity_id: str, config: Any) -> Any:
224
+ cal, _, rest = entity_id.partition("::")
225
+ key_uid, _, key_recurrence_id = rest.partition("::")
226
+ cal = config.get("calendar_entity_id") or cal
227
+ uid = config.get("uid") or key_uid
228
+ recurrence_id = config.get("recurrence_id") or key_recurrence_id or None
229
+ start = _calendar_bound(config.get("start"))
230
+ end = _calendar_bound(config.get("end"))
231
+ if start is None or end is None:
232
+ raise HomeAssistantError(
233
+ f"Calendar snapshot for {entity_id!r} has no usable start/end"
234
+ )
235
+
236
+ # Core merges an update into the stored event: empty text clears a field.
237
+ event: dict[str, Any] = {
238
+ "summary": config.get("summary") or "",
239
+ "dtstart": start[0],
240
+ "dtend": end[0],
241
+ "description": config.get("description") or "",
242
+ "location": config.get("location") or "",
243
+ }
244
+ # No rrule: on one occurrence it would start a second series under the uid.
245
+
246
+ if not uid:
247
+ return await _recreate_calendar_event(client, cal, event, start, end)
248
+
249
+ message: dict[str, Any] = {
250
+ "type": "calendar/event/update",
251
+ "entity_id": cal,
252
+ "uid": uid,
253
+ "event": event,
254
+ }
255
+ if recurrence_id:
256
+ message["recurrence_id"] = recurrence_id
257
+ try:
258
+ return await _manager()._ws_send(client, message)
259
+ except HomeAssistantCommandError as err:
260
+ unsupported = err.code == "not_supported"
261
+ # Local Calendar reports a missing event as a generic ``failed``, so
262
+ # only that code is checked against the calendar before re-creating.
263
+ if not unsupported and (
264
+ err.code != "failed"
265
+ or await _locate_calendar_event(client, cal, uid, recurrence_id, start[0])
266
+ is not None
267
+ ):
268
+ raise
269
+ if recurrence_id:
270
+ # create_event can only add a detached event, not the occurrence.
271
+ cause = "cannot be updated" if unsupported else "no longer exists"
272
+ raise HomeAssistantError(
273
+ f"Occurrence {recurrence_id} of event {uid} {cause} on {cal}, "
274
+ "and an occurrence cannot be re-created into its series"
275
+ ) from err
276
+ logger.info(
277
+ "Restoring calendar event %s on %s in place is not possible (%s); "
278
+ "re-creating it under a new uid instead",
279
+ uid,
280
+ cal,
281
+ err,
282
+ )
283
+ return await _recreate_calendar_event(client, cal, event, start, end)
@@ -56,7 +56,7 @@ from collections import Counter
56
56
  from collections.abc import AsyncIterator, Awaitable, Callable
57
57
  from contextlib import asynccontextmanager, suppress
58
58
  from dataclasses import dataclass, field
59
- from datetime import UTC, datetime, timedelta
59
+ from datetime import UTC, datetime
60
60
  from functools import cached_property, partial
61
61
  from pathlib import Path
62
62
  from typing import Any, Literal, NotRequired, TypedDict
@@ -66,6 +66,7 @@ import yaml # type: ignore[import-untyped]
66
66
  from ha_mcp._vendor.fastmcp.exceptions import ToolError
67
67
  from ha_mcp._vendor.websockets.exceptions import ConnectionClosed
68
68
 
69
+ from .backup_calendar import _fetch_calendar_event, _restore_calendar_event
69
70
  from .backup_dashboards import (
70
71
  _DASHBOARD_KIND,
71
72
  dashboard_comparison,
@@ -2314,276 +2315,6 @@ async def _restore_group(client: Any, entity_id: str, config: Any) -> Any:
2314
2315
  return await _ws_send(client, {**group_set, "service_data": service_data})
2315
2316
 
2316
2317
 
2317
- # Calendar events — calendar.get_events to fetch, calendar.create/update services.
2318
-
2319
-
2320
- # Bounds of the second sweep below: wide enough for a past event or one booked
2321
- # well ahead, without asking a busy calendar to expand a decade of recurrences.
2322
- _CALENDAR_WIDE_LOOKBACK_DAYS = 366
2323
- _CALENDAR_WIDE_LOOKAHEAD_DAYS = 732
2324
-
2325
-
2326
- async def _find_calendar_event(
2327
- client: Any,
2328
- cal: str,
2329
- uid: str,
2330
- recurrence_id: str | None,
2331
- start: datetime,
2332
- end: datetime,
2333
- ) -> Any:
2334
- """Return the event with ``uid`` on ``cal`` between ``start`` and ``end``.
2335
-
2336
- Reads the REST calendar view rather than the ``calendar.get_events``
2337
- service: the service response is built by HA's
2338
- ``_list_events_dict_factory``, which keeps only ``LIST_EVENT_FIELDS``
2339
- (start/end/summary/description/location/status) and therefore carries no
2340
- ``uid`` to match on. ``/api/calendars/{entity_id}`` serialises the whole
2341
- CalendarEvent, so uid, recurrence_id and rrule survive — the same endpoint
2342
- ``ha_config_get_calendar_events`` reads.
2343
-
2344
- A recurring series is expanded into occurrences that all share the ``uid``,
2345
- so ``recurrence_id`` selects which one; without it the first match wins.
2346
- """
2347
- try:
2348
- events = await client._request(
2349
- "GET",
2350
- f"/calendars/{cal}",
2351
- params={"start": start.isoformat(), "end": end.isoformat()},
2352
- )
2353
- except HomeAssistantError as err:
2354
- # Only treat 404 (calendar entity not present) as "skip silently".
2355
- # Auth/transport/server errors deserve a WARNING so an operator
2356
- # can spot a misconfigured calendar integration; matches the
2357
- # ``status_code == 404`` narrowing the automation/script/scene
2358
- # fetchers use.
2359
- if getattr(err, "status_code", None) == 404:
2360
- return None
2361
- raise
2362
- for event in _require_list(events, f"/calendars/{cal}"):
2363
- if not isinstance(event, dict) or event.get("uid") != uid:
2364
- continue
2365
- if recurrence_id is not None and event.get("recurrence_id") != recurrence_id:
2366
- continue
2367
- return event
2368
- return None
2369
-
2370
-
2371
- def _recurrence_id_window(
2372
- recurrence_id: str | None,
2373
- ) -> tuple[datetime, datetime] | None:
2374
- """A day-wide window around an iCalendar recurrence id, if it parses."""
2375
- if not recurrence_id:
2376
- return None
2377
- for fmt in ("%Y%m%dT%H%M%S", "%Y%m%dT%H%M%SZ", "%Y%m%d"):
2378
- try:
2379
- at = datetime.strptime(recurrence_id, fmt).replace(tzinfo=UTC)
2380
- except ValueError:
2381
- continue
2382
- return at - timedelta(days=1), at + timedelta(days=1)
2383
- return None
2384
-
2385
-
2386
- async def _fetch_calendar_event(client: Any, entity_id: str) -> Any:
2387
- # entity_id is "<calendar.entity>::<event_uid>[::<recurrence_id>]"
2388
- cal, _, rest = entity_id.partition("::")
2389
- uid, _, recurrence_id = rest.partition("::")
2390
- if not cal or not uid:
2391
- return None
2392
- # Configurable lookahead window. Default 7 days catches typical edits;
2393
- # set HAMCP_AUTO_BACKUP_CALENDAR_LOOKAHEAD_DAYS to widen for far-future
2394
- # events or narrow to skip noise. Bounded so a typo can't query
2395
- # decades of history.
2396
- try:
2397
- from .config import get_global_settings
2398
-
2399
- days = int(
2400
- getattr(get_global_settings(), "auto_backup_calendar_lookahead_days", 7)
2401
- )
2402
- except (AttributeError, ImportError, ValueError, TypeError):
2403
- days = 7
2404
- days = max(1, min(365, days))
2405
- now = datetime.now(UTC)
2406
- wanted = recurrence_id or None
2407
- # A recurrence_id names the occurrence's own date, so an occurrence far
2408
- # outside the windows below is still found in one request.
2409
- around = _recurrence_id_window(wanted)
2410
- found = (
2411
- await _find_calendar_event(client, cal, uid, wanted, *around)
2412
- if around
2413
- else None
2414
- )
2415
- if found is None:
2416
- found = await _find_calendar_event(
2417
- client, cal, uid, wanted, now, now + timedelta(days=days)
2418
- )
2419
- if found is None:
2420
- # The configured window is the cheap common case, not the contract: a
2421
- # write targets an event by uid, and an event being edited or deleted
2422
- # can sit in the past or well beyond the lookahead. Missing it would
2423
- # silently skip the snapshot and leave the prior values unrecoverable,
2424
- # so sweep once more over a wide window before concluding it is gone.
2425
- found = await _find_calendar_event(
2426
- client,
2427
- cal,
2428
- uid,
2429
- wanted,
2430
- now - timedelta(days=_CALENDAR_WIDE_LOOKBACK_DAYS),
2431
- now + timedelta(days=_CALENDAR_WIDE_LOOKAHEAD_DAYS),
2432
- )
2433
- if found is None:
2434
- return None
2435
- if wanted is None and found.get("rrule"):
2436
- # The write targets a whole series, but the calendar view only exposes
2437
- # expanded OCCURRENCES — never the master event's own start. Restoring
2438
- # one occurrence's values would revert a single date and leave the rest
2439
- # of the series edited, or re-create a series starting at the wrong
2440
- # date, both reported as a successful restore. No snapshot is the
2441
- # honest answer; a single-occurrence write (which carries a
2442
- # recurrence_id) is captured normally.
2443
- logger.warning(
2444
- "Auto-backup: no snapshot for series-wide write on %s (event %s); "
2445
- "Home Assistant exposes only expanded occurrences, so the series "
2446
- "could not be restored faithfully",
2447
- cal,
2448
- uid,
2449
- )
2450
- return None
2451
- return {"calendar_entity_id": cal, **found}
2452
-
2453
-
2454
- def _calendar_bound(value: Any) -> tuple[str, bool] | None:
2455
- """Return ``(iso_value, is_date_only)`` for a snapshotted event boundary.
2456
-
2457
- The REST view wraps each boundary as ``{"dateTime": ...}`` (timed) or
2458
- ``{"date": ...}`` (all-day); snapshots taken before that switch hold a
2459
- flat ISO string, which a 10-character length identifies as date-only.
2460
- """
2461
- if isinstance(value, dict):
2462
- if value.get("dateTime"):
2463
- return str(value["dateTime"]), False
2464
- if value.get("date"):
2465
- return str(value["date"]), True
2466
- return None
2467
- if isinstance(value, str) and value:
2468
- return value, len(value) == 10
2469
- return None
2470
-
2471
-
2472
- # HA reports a missing event as a plain ``failed`` command error whose message
2473
- # comes from the integration (Local Calendar surfaces ical's "No existing item
2474
- # with uid/recurrence_id: ..."), so absence has to be read off the message.
2475
- _CALENDAR_EVENT_ABSENT_MARKERS = ("no existing item", "not found", "does not exist")
2476
-
2477
-
2478
- def _calendar_update_cannot_apply(err: HomeAssistantCommandError) -> bool:
2479
- """Whether ``err`` proves the in-place update never touched the event."""
2480
- if getattr(err, "code", None) == "not_supported":
2481
- # The calendar advertises no UPDATE_EVENT, so it cannot ever accept
2482
- # the update and re-creating is the only restore available.
2483
- return True
2484
- message = str(err).lower()
2485
- return any(marker in message for marker in _CALENDAR_EVENT_ABSENT_MARKERS)
2486
-
2487
-
2488
- async def _recreate_calendar_event(
2489
- client: Any,
2490
- cal: str,
2491
- event: dict[str, Any],
2492
- start: tuple[str, bool],
2493
- end: tuple[str, bool],
2494
- ) -> Any:
2495
- """Create an event that no longer exists under its snapshotted uid.
2496
-
2497
- Always a single event: a series-wide write is never snapshotted (the
2498
- calendar view cannot describe the series), and a snapshot of one
2499
- occurrence must not be re-created as a series of its own.
2500
- """
2501
- data: dict[str, Any] = {"entity_id": cal, "summary": event["summary"]}
2502
- if start[1]:
2503
- data.update({"start_date": start[0], "end_date": end[0]})
2504
- else:
2505
- data.update({"start_date_time": start[0], "end_date_time": end[0]})
2506
- for key in ("description", "location"):
2507
- if event.get(key):
2508
- data[key] = event[key]
2509
- return await _rest_post(client, "services/calendar/create_event", data)
2510
-
2511
-
2512
- async def _restore_calendar_event(client: Any, entity_id: str, config: Any) -> Any:
2513
- cal, _, rest = entity_id.partition("::")
2514
- key_uid, _, key_recurrence_id = rest.partition("::")
2515
- cal = config.get("calendar_entity_id") or cal
2516
- uid = config.get("uid") or key_uid
2517
- recurrence_id = config.get("recurrence_id") or key_recurrence_id or None
2518
- start = _calendar_bound(config.get("start"))
2519
- end = _calendar_bound(config.get("end"))
2520
- if start is None or end is None:
2521
- raise HomeAssistantError(
2522
- f"Calendar snapshot for {entity_id!r} has no usable start/end"
2523
- )
2524
-
2525
- # Home Assistant merges the update into the stored event (ical dumps it
2526
- # with ``exclude_unset``), so a field left out keeps whatever the write
2527
- # put there. Send the text fields unconditionally — empty clears a
2528
- # description or location the write added.
2529
- event: dict[str, Any] = {
2530
- "summary": config.get("summary") or "",
2531
- "dtstart": start[0],
2532
- "dtend": end[0],
2533
- "description": config.get("description") or "",
2534
- "location": config.get("location") or "",
2535
- }
2536
- # ``rrule`` is deliberately never replayed. Every expanded occurrence
2537
- # carries the series' rule, and sending it back onto one occurrence —
2538
- # which ical has already forked into a plain event — would make that
2539
- # occurrence a second series under the same uid, duplicating every later
2540
- # date.
2541
-
2542
- if not uid:
2543
- return await _recreate_calendar_event(client, cal, event, start, end)
2544
-
2545
- # An edited event still exists under its uid, so put the captured values
2546
- # back in place instead of creating a second copy. Only a snapshot of a
2547
- # DELETED event (or a calendar without UPDATE_EVENT) falls through to
2548
- # re-creation.
2549
- message: dict[str, Any] = {
2550
- "type": "calendar/event/update",
2551
- "entity_id": cal,
2552
- "uid": uid,
2553
- "event": event,
2554
- }
2555
- if recurrence_id:
2556
- message["recurrence_id"] = recurrence_id
2557
- try:
2558
- return await _ws_send(client, message)
2559
- except HomeAssistantCommandError as err:
2560
- if not _calendar_update_cannot_apply(err):
2561
- # A transport drop, a timeout or an unclassified command failure
2562
- # leaves it unknown whether HA applied the update; re-creating
2563
- # then leaves a duplicate behind. Only a failure that PROVES the
2564
- # update never landed falls through. Connection errors and
2565
- # timeouts are separate types, so they never reach here at all.
2566
- raise
2567
- if recurrence_id:
2568
- # The occurrence is gone — deleted from the series, or the series
2569
- # moved and this recurrence_id no longer names one of its dates.
2570
- # ``create_event`` could only add a detached event next to the
2571
- # series, which is not the occurrence being restored, so say so
2572
- # instead of inventing one.
2573
- raise HomeAssistantError(
2574
- f"Occurrence {recurrence_id} of event {uid} no longer exists on "
2575
- f"{cal}, and an occurrence cannot be re-created into its series"
2576
- ) from err
2577
- logger.info(
2578
- "Restoring calendar event %s on %s in place is not possible (%s); "
2579
- "re-creating it instead",
2580
- uid,
2581
- cal,
2582
- err,
2583
- )
2584
- return await _recreate_calendar_event(client, cal, event, start, end)
2585
-
2586
-
2587
2318
  # Areas / floors — config/area_registry/{list,update}, config/floor_registry/{list,update}
2588
2319
 
2589
2320
 
@@ -444,6 +444,7 @@
444
444
  "policies.pending.decision.denied": "rədd edilib",
445
445
  "policies.pending.invalid_token": "Bu təsdiq tokeni artıq etibarlı deyil (artıq istifadə edilib və ya vaxtı bitib).",
446
446
  "policies.pending.action_failed": "Təsdiq əməliyyatı alınmadı: {detail}",
447
+ "policies.pending.announcement": "Gözləyən təsdiqlər: {count}",
447
448
  "visibility.errors.reach_server": "Serverlə əlaqə yaratmaq mümkün olmadı: {message}",
448
449
  "visibility.errors.corrupt_suffix": " (entity_visibility.json faylı zədələnmiş görünür; serverin məlumat qovluğunda onu redaktə edin və ya silin)",
449
450
  "visibility.errors.load_detail": "Görünürlük konfiqurasiyasını yükləmək alınmadı: {detail}",
@@ -444,6 +444,7 @@
444
444
  "policies.pending.decision.denied": "zamítnuto",
445
445
  "policies.pending.invalid_token": "Tento schvalovací token již není platný (již spotřebován nebo vypršel).",
446
446
  "policies.pending.action_failed": "Akce schválení selhala: {detail}",
447
+ "policies.pending.announcement": "Čekající schválení: {count}",
447
448
  "visibility.errors.reach_server": "Nepodařilo se dosáhnout serveru: {message}",
448
449
  "visibility.errors.corrupt_suffix": " (soubor entity_visibility.json se zdá být poškozený; upravte jej nebo smažte v datovém adresáři serveru)",
449
450
  "visibility.errors.load_detail": "Nepodařilo se načíst konfiguraci viditelnosti: {detail}",
@@ -444,6 +444,7 @@
444
444
  "policies.pending.decision.denied": "abgelehnt",
445
445
  "policies.pending.invalid_token": "Dieses Genehmigungs-Token ist nicht mehr gültig (bereits verbraucht oder abgelaufen).",
446
446
  "policies.pending.action_failed": "Genehmigungs-Aktion fehlgeschlagen: {detail}",
447
+ "policies.pending.announcement": "Ausstehende Genehmigungen: {count}",
447
448
  "visibility.errors.reach_server": "Server konnte nicht erreicht werden: {message}",
448
449
  "visibility.errors.corrupt_suffix": " (entity_visibility.json scheint beschädigt zu sein; bearbeite oder lösche sie im Datenverzeichnis des Servers)",
449
450
  "visibility.errors.load_detail": "Sichtbarkeitskonfiguration konnte nicht geladen werden: {detail}",
@@ -444,6 +444,7 @@
444
444
  "policies.pending.decision.denied": "rifuzita",
445
445
  "policies.pending.invalid_token": "Ĉi tiu aprobo-ĵetono ne plu validas (jam konsumita aŭ eksvalidiĝinta).",
446
446
  "policies.pending.action_failed": "Aprobo-ago malsukcesis: {detail}",
447
+ "policies.pending.announcement": "Pendentaj aproboj: {count}",
447
448
  "visibility.errors.reach_server": "Ne eblis atingi la servilon: {message}",
448
449
  "visibility.errors.corrupt_suffix": " (entity_visibility.json ŝajnas difektita; redaktu aŭ forigu ĝin en la datendosierujo de la servilo)",
449
450
  "visibility.errors.load_detail": "Malsukcesis ŝargi videblecan agordon: {detail}",
@@ -444,6 +444,7 @@
444
444
  "policies.pending.decision.denied": "denegada",
445
445
  "policies.pending.invalid_token": "Este token de aprobación ya no es válido (ya se ha consumido o ha caducado).",
446
446
  "policies.pending.action_failed": "Ha fallado la acción de aprobación: {detail}",
447
+ "policies.pending.announcement": "Aprobaciones pendientes: {count}",
447
448
  "visibility.errors.reach_server": "No se ha podido contactar con el servidor: {message}",
448
449
  "visibility.errors.corrupt_suffix": " (entity_visibility.json parece estar corrupto; edítalo o bórralo en el directorio de datos del servidor)",
449
450
  "visibility.errors.load_detail": "Fallo al cargar la configuración de visibilidad: {detail}",
@@ -444,6 +444,7 @@
444
444
  "policies.pending.decision.denied": "refusée",
445
445
  "policies.pending.invalid_token": "Ce jeton d'approbation n'est plus valide (déjà consommé ou expiré).",
446
446
  "policies.pending.action_failed": "L'action d'approbation a échoué : {detail}",
447
+ "policies.pending.announcement": "Approbations en attente : {count}",
447
448
  "visibility.errors.reach_server": "Impossible d'atteindre le serveur : {message}",
448
449
  "visibility.errors.corrupt_suffix": " (entity_visibility.json semble corrompu ; modifiez-le ou supprimez-le dans le répertoire de données du serveur)",
449
450
  "visibility.errors.load_detail": "Échec du chargement de la configuration de visibilité : {detail}",
@@ -444,6 +444,7 @@
444
444
  "policies.pending.decision.denied": "elutasítva",
445
445
  "policies.pending.invalid_token": "Ez a jóváhagyási token már nem érvényes (már felhasználták vagy lejárt).",
446
446
  "policies.pending.action_failed": "A jóváhagyási művelet sikertelen: {detail}",
447
+ "policies.pending.announcement": "Függőben lévő jóváhagyások: {count}",
447
448
  "visibility.errors.reach_server": "Nem sikerült elérni a szervert: {message}",
448
449
  "visibility.errors.corrupt_suffix": " (az entity_visibility.json sérültnek tűnik; szerkessze vagy törölje a szerver adatkönyvtárában)",
449
450
  "visibility.errors.load_detail": "A láthatósági konfiguráció betöltése sikertelen: {detail}",