ha-mcp-dev 9.1.0.dev3257__tar.gz → 9.1.0.dev3261__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 (824) hide show
  1. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/PKG-INFO +1 -1
  2. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/pyproject.toml +1 -1
  3. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/pyproject.toml.orig +1 -1
  4. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/backup_helper_target.py +8 -3
  5. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/backup_manager.py +41 -68
  6. ha_mcp_dev-9.1.0.dev3261/src/ha_mcp/backup_todo.py +379 -0
  7. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/settings_ui/_handlers_backups.py +6 -7
  8. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/backup.py +11 -7
  9. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/backup_access.py +3 -15
  10. ha_mcp_dev-9.1.0.dev3261/src/ha_mcp/tools/component_todo.py +119 -0
  11. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/helpers.py +5 -3
  12. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/tools_code.py +7 -15
  13. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/tools_service.py +9 -11
  14. ha_mcp_dev-9.1.0.dev3261/src/ha_mcp/tools/tools_todo.py +963 -0
  15. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/util_helpers.py +135 -4
  16. ha_mcp_dev-9.1.0.dev3257/src/ha_mcp/tools/tools_todo.py +0 -591
  17. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/LICENSE +0 -0
  18. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/README.md +0 -0
  19. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/__init__.py +0 -0
  20. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/__main__.py +0 -0
  21. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_pypi_marker +0 -0
  22. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_rich_compat.py +0 -0
  23. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/__init__.py +0 -0
  24. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
  25. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
  26. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
  27. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
  28. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
  29. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
  30. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
  31. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
  32. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
  33. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
  34. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
  35. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
  36. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
  37. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
  38. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
  39. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
  40. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
  41. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
  42. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
  43. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev_security.py +0 -0
  44. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
  45. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
  46. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
  47. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
  48. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
  49. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
  50. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
  51. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
  52. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
  53. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
  54. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
  55. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
  56. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
  57. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
  58. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
  59. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
  60. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
  61. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
  62. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
  63. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
  64. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
  65. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
  66. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
  67. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
  68. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
  69. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
  70. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
  71. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
  72. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
  73. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
  74. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
  75. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
  76. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
  77. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
  78. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
  79. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
  80. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
  81. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
  82. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
  83. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
  84. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
  85. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/client/mixins/skills.py +0 -0
  86. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
  87. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
  88. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
  89. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
  90. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
  91. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
  92. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
  93. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
  94. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
  95. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
  96. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
  97. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
  98. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
  99. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
  100. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
  101. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
  102. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
  103. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
  104. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
  105. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
  106. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
  107. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
  108. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
  109. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
  110. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
  111. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
  112. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
  113. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
  114. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
  115. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
  116. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
  117. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
  118. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
  119. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
  120. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
  121. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
  122. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
  123. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/jev_search.py +0 -0
  124. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
  125. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
  126. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
  127. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
  128. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
  129. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
  130. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
  131. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
  132. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
  133. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
  134. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
  135. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
  136. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
  137. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
  138. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
  139. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
  140. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
  141. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
  142. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
  143. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
  144. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
  145. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
  146. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
  147. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
  148. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
  149. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
  150. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
  151. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
  152. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
  153. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
  154. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
  155. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
  156. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
  157. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
  158. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
  159. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
  160. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
  161. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
  162. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
  163. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
  164. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
  165. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
  166. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
  167. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
  168. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
  169. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
  170. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
  171. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
  172. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
  173. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
  174. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
  175. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
  176. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
  177. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
  178. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
  179. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
  180. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
  181. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
  182. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
  183. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
  184. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
  185. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
  186. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
  187. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
  188. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
  189. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
  190. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
  191. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
  192. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
  193. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
  194. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
  195. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
  196. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/mixins/extensions.py +0 -0
  197. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
  198. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
  199. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
  200. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
  201. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
  202. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
  203. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
  204. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
  205. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
  206. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
  207. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
  208. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
  209. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
  210. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
  211. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
  212. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
  213. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
  214. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
  215. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
  216. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
  217. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
  218. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
  219. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
  220. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
  221. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
  222. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
  223. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
  224. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
  225. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
  226. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
  227. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
  228. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
  229. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
  230. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
  231. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
  232. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
  233. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
  234. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
  235. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
  236. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
  237. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
  238. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
  239. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
  240. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
  241. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
  242. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
  243. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
  244. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
  245. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/skills/__init__.py +0 -0
  246. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/skills/_constants.py +0 -0
  247. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/skills/_resources.py +0 -0
  248. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/skills/_snapshot.py +0 -0
  249. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/skills/_source.py +0 -0
  250. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/skills/client.py +0 -0
  251. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/skills/extension.py +0 -0
  252. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/skills/models.py +0 -0
  253. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
  254. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
  255. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
  256. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
  257. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
  258. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
  259. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
  260. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
  261. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
  262. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
  263. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
  264. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
  265. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
  266. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
  267. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
  268. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
  269. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
  270. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
  271. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
  272. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
  273. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
  274. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
  275. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
  276. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
  277. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
  278. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
  279. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
  280. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
  281. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
  282. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
  283. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
  284. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
  285. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
  286. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
  287. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
  288. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
  289. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
  290. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
  291. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
  292. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
  293. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
  294. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
  295. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
  296. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
  297. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
  298. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
  299. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
  300. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
  301. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
  302. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
  303. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
  304. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
  305. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
  306. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
  307. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
  308. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
  309. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
  310. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
  311. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
  312. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
  313. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
  314. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
  315. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
  316. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
  317. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
  318. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
  319. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
  320. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
  321. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
  322. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
  323. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
  324. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
  325. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
  326. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
  327. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
  328. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
  329. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
  330. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
  331. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
  332. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
  333. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
  334. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
  335. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
  336. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
  337. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
  338. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
  339. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
  340. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
  341. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
  342. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
  343. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
  344. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
  345. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
  346. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
  347. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
  348. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
  349. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
  350. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
  351. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
  352. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
  353. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
  354. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
  355. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
  356. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
  357. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
  358. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
  359. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
  360. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
  361. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
  362. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
  363. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
  364. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
  365. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
  366. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
  367. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
  368. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
  369. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
  370. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
  371. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
  372. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
  373. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
  374. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
  375. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
  376. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
  377. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
  378. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
  379. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
  380. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
  381. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
  382. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
  383. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
  384. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
  385. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
  386. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
  387. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
  388. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
  389. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
  390. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
  391. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
  392. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
  393. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
  394. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
  395. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
  396. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
  397. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
  398. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
  399. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
  400. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
  401. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
  402. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
  403. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
  404. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
  405. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
  406. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
  407. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
  408. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
  409. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
  410. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/shared/_request_clock.py +0 -0
  411. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
  412. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
  413. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
  414. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
  415. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
  416. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
  417. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
  418. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
  419. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
  420. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
  421. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
  422. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
  423. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
  424. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
  425. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
  426. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
  427. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
  428. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
  429. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
  430. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
  431. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
  432. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
  433. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
  434. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
  435. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
  436. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
  437. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
  438. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
  439. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
  440. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
  441. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
  442. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
  443. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
  444. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
  445. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
  446. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
  447. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/requirements.txt +0 -0
  448. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
  449. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
  450. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
  451. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
  452. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
  453. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
  454. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
  455. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
  456. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
  457. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
  458. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
  459. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
  460. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
  461. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/client.py +0 -0
  462. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
  463. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
  464. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
  465. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
  466. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
  467. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
  468. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
  469. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
  470. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
  471. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
  472. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
  473. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
  474. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
  475. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
  476. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
  477. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
  478. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
  479. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
  480. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
  481. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
  482. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
  483. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
  484. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/server.py +0 -0
  485. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
  486. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
  487. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
  488. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
  489. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
  490. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
  491. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
  492. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
  493. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
  494. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
  495. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
  496. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
  497. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
  498. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
  499. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
  500. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
  501. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
  502. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
  503. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_vendor/websockets/version.py +0 -0
  504. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/_version.py +0 -0
  505. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/app_discovery.py +0 -0
  506. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/auth/__init__.py +0 -0
  507. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/auth/consent_form.py +0 -0
  508. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/auth/iss_stamp.py +0 -0
  509. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/auth/oidc_compat.py +0 -0
  510. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/auth/provider.py +0 -0
  511. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/backup_dashboards.py +0 -0
  512. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/backup_diff.py +0 -0
  513. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/backup_entities.py +0 -0
  514. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/backup_entity_ids.py +0 -0
  515. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/backup_integrations.py +0 -0
  516. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/backup_tags.py +0 -0
  517. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/backup_zones.py +0 -0
  518. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/browser_landing.py +0 -0
  519. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/client/__init__.py +0 -0
  520. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/client/admin_routes.py +0 -0
  521. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/client/error_log_journald.py +0 -0
  522. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/client/models.py +0 -0
  523. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/client/rest_client.py +0 -0
  524. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/client/supervisor_client.py +0 -0
  525. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/client/websocket_client.py +0 -0
  526. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/client/websocket_listener.py +0 -0
  527. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/config.py +0 -0
  528. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/config_backup.py +0 -0
  529. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/config_meta.py +0 -0
  530. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/config_overrides.py +0 -0
  531. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/config_registry.py +0 -0
  532. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/config_settings.py +0 -0
  533. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
  534. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
  535. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
  536. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/dashboard_screenshot/engine_compat.py +0 -0
  537. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
  538. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
  539. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
  540. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/errors.py +0 -0
  541. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/ha_request_queue.py +0 -0
  542. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/hacs_auto_refresh.py +0 -0
  543. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/http_transport.py +0 -0
  544. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/image_info.py +0 -0
  545. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/llm_exposure.py +0 -0
  546. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/log_filters.py +0 -0
  547. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/mcp_client_context.py +0 -0
  548. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/policy/__init__.py +0 -0
  549. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/policy/approval_queue.py +0 -0
  550. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/policy/decision_pin.py +0 -0
  551. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/policy/decisions.py +0 -0
  552. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/policy/editing.py +0 -0
  553. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/policy/evaluator.py +0 -0
  554. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/policy/events.py +0 -0
  555. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/policy/handlers.py +0 -0
  556. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/policy/middleware.py +0 -0
  557. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/policy/model.py +0 -0
  558. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/policy/mrtr.py +0 -0
  559. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/policy/persistence.py +0 -0
  560. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/policy/server_channels.py +0 -0
  561. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/policy/value_sources.py +0 -0
  562. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/py.typed +0 -0
  563. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/read_only.py +0 -0
  564. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/redaction.py +0 -0
  565. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/renamed_tools.py +0 -0
  566. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  567. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  568. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
  569. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-actions.md +0 -0
  570. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
  571. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
  572. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  573. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  574. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  575. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  576. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  577. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  578. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  579. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
  580. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  581. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/triggers-and-conditions.md +0 -0
  582. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
  583. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/server.py +0 -0
  584. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/server_instructions.py +0 -0
  585. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/server_lifespan.py +0 -0
  586. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/server_tool_text.py +0 -0
  587. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/settings_ui/__init__.py +0 -0
  588. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
  589. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
  590. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/settings_ui/_handlers_oauth_callbacks.py +0 -0
  591. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
  592. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
  593. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
  594. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/settings_ui/_i18n.py +0 -0
  595. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
  596. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/settings_ui/_persistence.py +0 -0
  597. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
  598. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/settings_ui/_theme.py +0 -0
  599. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
  600. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/settings_ui/locales/README.md +0 -0
  601. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/settings_ui/locales/az.json +0 -0
  602. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
  603. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/settings_ui/locales/de.json +0 -0
  604. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/settings_ui/locales/en.json +0 -0
  605. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
  606. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/settings_ui/locales/es.json +0 -0
  607. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
  608. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/settings_ui/locales/it.json +0 -0
  609. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
  610. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
  611. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
  612. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
  613. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
  614. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
  615. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
  616. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
  617. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/settings_ui/settings.css +0 -0
  618. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/settings_ui/settings.html +0 -0
  619. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/settings_ui/settings_js/01_i18n_state.js +0 -0
  620. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/settings_ui/settings_js/02_tools_restart.js +0 -0
  621. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/settings_ui/settings_js/03_render_save.js +0 -0
  622. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/settings_ui/settings_js/04_backups.js +0 -0
  623. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/settings_ui/settings_js/05_feature_flags.js +0 -0
  624. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/settings_ui/settings_js/06_policy_cards.js +0 -0
  625. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/settings_ui/settings_js/07_policy_actions.js +0 -0
  626. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/settings_ui/settings_js/08_advanced.js +0 -0
  627. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/settings_ui/settings_js/09_prefs_visibility.js +0 -0
  628. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/settings_ui/settings_js/10_oauth_callbacks.js +0 -0
  629. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/smoke_test.py +0 -0
  630. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  631. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/storage_helper_types.py +0 -0
  632. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/strict_bps.py +0 -0
  633. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tool_dispatch.py +0 -0
  634. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/__init__.py +0 -0
  635. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/addon_connection_hints.py +0 -0
  636. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/area_messages.py +0 -0
  637. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/auto_backup.py +0 -0
  638. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/backup_on_demand.py +0 -0
  639. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/backup_snapshot.py +0 -0
  640. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/backup_snapshot_restore.py +0 -0
  641. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  642. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/best_practice_result.py +0 -0
  643. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/best_practice_variables.py +0 -0
  644. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/blueprint_sources.py +0 -0
  645. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
  646. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/blueprint_write.py +0 -0
  647. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/bug_report_config.py +0 -0
  648. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/bug_report_templates.py +0 -0
  649. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/bulk_selector.py +0 -0
  650. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/coercion.py +0 -0
  651. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/component_api.py +0 -0
  652. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/component_config_entries.py +0 -0
  653. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/component_config_reads.py +0 -0
  654. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
  655. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/component_devices.py +0 -0
  656. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/component_helper_collections.py +0 -0
  657. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/component_registries.py +0 -0
  658. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
  659. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/config_entry_backup.py +0 -0
  660. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/config_entry_flow.py +0 -0
  661. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
  662. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/config_entry_flow_introspect.py +0 -0
  663. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
  664. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
  665. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/config_entry_identity.py +0 -0
  666. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
  667. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
  668. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/config_file_visibility.py +0 -0
  669. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/config_helpers/__init__.py +0 -0
  670. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/config_helpers/core_payload.py +0 -0
  671. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/config_helpers/create.py +0 -0
  672. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/config_helpers/describe.py +0 -0
  673. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/config_helpers/flow.py +0 -0
  674. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/config_helpers/icon_route.py +0 -0
  675. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/config_helpers/listing.py +0 -0
  676. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/config_helpers/registry.py +0 -0
  677. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/config_helpers/schemas.py +0 -0
  678. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/config_helpers/typed_config.py +0 -0
  679. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/config_helpers/update.py +0 -0
  680. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/config_helpers/validation.py +0 -0
  681. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/config_subentry_restore.py +0 -0
  682. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/config_write_errors.py +0 -0
  683. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/config_write_helpers.py +0 -0
  684. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/core_contract.py +0 -0
  685. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/dashboard_card_describe.py +0 -0
  686. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
  687. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/dashboard_list_checks.py +0 -0
  688. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/dashboard_read_errors.py +0 -0
  689. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/dev_backup.py +0 -0
  690. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/device_control.py +0 -0
  691. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/device_enrichment.py +0 -0
  692. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/diagnostics_helpers.py +0 -0
  693. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/energy_preferences.py +0 -0
  694. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/entity_expose_batch.py +0 -0
  695. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/entity_param_parsing.py +0 -0
  696. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/entity_registration.py +0 -0
  697. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/entity_removal.py +0 -0
  698. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/entity_update_fields.py +0 -0
  699. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/error_log_parsing.py +0 -0
  700. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/flow_helper_lookup.py +0 -0
  701. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/hacs_backend.py +0 -0
  702. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/hacs_registration.py +0 -0
  703. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/helper_flows.py +0 -0
  704. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/history_response.py +0 -0
  705. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/integration_entry_state.py +0 -0
  706. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
  707. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/log_common.py +0 -0
  708. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/log_sources.py +0 -0
  709. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/log_sources_fault.py +0 -0
  710. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/log_sources_logbook.py +0 -0
  711. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
  712. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/radio/__init__.py +0 -0
  713. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/radio/base.py +0 -0
  714. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/radio/matter.py +0 -0
  715. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/radio/thread.py +0 -0
  716. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/radio/zigbee.py +0 -0
  717. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/radio/zwave.py +0 -0
  718. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/radio/zwave_parameters.py +0 -0
  719. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/recorder_errors.py +0 -0
  720. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/reference_validator.py +0 -0
  721. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/registry.py +0 -0
  722. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
  723. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/response_helpers.py +0 -0
  724. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/scene_discovery.py +0 -0
  725. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/search/__init__.py +0 -0
  726. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/search/base.py +0 -0
  727. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/search/component.py +0 -0
  728. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/search/entities.py +0 -0
  729. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/search/legacy.py +0 -0
  730. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/search/modes.py +0 -0
  731. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/search/overview.py +0 -0
  732. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/search/response.py +0 -0
  733. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/search/state.py +0 -0
  734. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/server_version.py +0 -0
  735. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  736. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  737. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  738. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
  739. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  740. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  741. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
  742. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  743. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  744. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  745. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/statistics_calendar.py +0 -0
  746. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/statistics_helpers.py +0 -0
  747. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/statistics_resets.py +0 -0
  748. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/system_restart.py +0 -0
  749. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/tool_hints.py +0 -0
  750. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
  751. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/tools_addons.py +0 -0
  752. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/tools_areas.py +0 -0
  753. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
  754. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  755. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  756. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/tools_calendar.py +0 -0
  757. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/tools_camera.py +0 -0
  758. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/tools_categories.py +0 -0
  759. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/tools_config_automations.py +0 -0
  760. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
  761. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  762. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
  763. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
  764. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
  765. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/tools_dev.py +0 -0
  766. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/tools_energy.py +0 -0
  767. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/tools_entities.py +0 -0
  768. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  769. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/tools_groups.py +0 -0
  770. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/tools_hacs.py +0 -0
  771. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/tools_history.py +0 -0
  772. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/tools_integrations.py +0 -0
  773. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/tools_labels.py +0 -0
  774. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/tools_logs.py +0 -0
  775. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/tools_radio.py +0 -0
  776. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/tools_registry.py +0 -0
  777. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/tools_resources.py +0 -0
  778. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/tools_search.py +0 -0
  779. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/tools_security_policy.py +0 -0
  780. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/tools_services.py +0 -0
  781. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/tools_system.py +0 -0
  782. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/tools_themes.py +0 -0
  783. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/tools_traces.py +0 -0
  784. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/tools_updates.py +0 -0
  785. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/tools_utility.py +0 -0
  786. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  787. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  788. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
  789. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/tools_zones.py +0 -0
  790. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/update_categories.py +0 -0
  791. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/validation_middleware.py +0 -0
  792. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/tools/ws_waiters.py +0 -0
  793. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/transforms/__init__.py +0 -0
  794. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/transforms/categorized_search.py +0 -0
  795. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/transforms/compact_params.py +0 -0
  796. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/transforms/component_helpers.py +0 -0
  797. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/transforms/component_search.py +0 -0
  798. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  799. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/transforms/write_tool_note.py +0 -0
  800. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/transport_security.py +0 -0
  801. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/update_check.py +0 -0
  802. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/utils/__init__.py +0 -0
  803. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/utils/config_hash.py +0 -0
  804. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/utils/config_write_lock.py +0 -0
  805. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/utils/dashboard_patch.py +0 -0
  806. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/utils/data_paths.py +0 -0
  807. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
  808. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/utils/domain_handlers.py +0 -0
  809. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/utils/entity_membership.py +0 -0
  810. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  811. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  812. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/utils/mcp_client_host.py +0 -0
  813. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/utils/operation_manager.py +0 -0
  814. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/utils/python_sandbox.py +0 -0
  815. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/utils/registry_update_lock.py +0 -0
  816. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/utils/skill_loader.py +0 -0
  817. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/utils/usage_logger.py +0 -0
  818. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/visibility/__init__.py +0 -0
  819. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/visibility/config_files.py +0 -0
  820. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/visibility/enforcement.py +0 -0
  821. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/visibility/identifier_aliases.py +0 -0
  822. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/visibility/model.py +0 -0
  823. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/src/ha_mcp/visibility/persistence.py +0 -0
  824. {ha_mcp_dev-9.1.0.dev3257 → ha_mcp_dev-9.1.0.dev3261}/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.0.dev3257
3
+ Version: 9.1.0.dev3261
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.0.dev3257"
7
+ version = "9.1.0.dev3261"
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.0.dev3257"
7
+ version = "9.1.0.dev3261"
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
@@ -18,6 +18,7 @@ from typing import Any, NoReturn
18
18
  from ._vendor.fastmcp.exceptions import ToolError
19
19
  from .backup_entities import current_entity_id
20
20
  from .backup_entity_ids import _manager
21
+ from .backup_todo import safety_target as todo_safety_target
21
22
 
22
23
 
23
24
  async def _stored_items(client: Any, helper_type: str) -> list[Any]:
@@ -83,8 +84,11 @@ async def safety_target(
83
84
  another item. For a storage item the registry entry whose unique_id is the
84
85
  stored id follows it. An item can outlive its registry entry, so only its
85
86
  absence from the stored items means it is gone: the restore recreates it or
86
- fails, and overwrites nothing that needs a backup.
87
+ fails, and overwrites nothing that needs a backup. A todo item is followed
88
+ by its uid (``backup_todo.safety_target``).
87
89
  """
90
+ if domain == "todo_item":
91
+ return await todo_safety_target(client, entity_id, config)
88
92
  bm = _manager()
89
93
  if domain == "entity":
90
94
  return await current_entity_id(client, entity_id, config)
@@ -172,8 +176,9 @@ def note_no_safety_backup(
172
176
  ) -> None:
173
177
  """Say why a restore goes ahead without a safety backup."""
174
178
  if target is None: # safety_target: the stored item no longer exists
175
- # An entity snapshot's "id" is its registry entry id, not a name to show.
176
- key = "entity_id" if domain == "entity" else "id"
179
+ # An entity snapshot's "id" is its registry entry id, not a name to show;
180
+ # a todo snapshot has none.
181
+ key = {"entity": "entity_id", "todo_item": "summary"}.get(domain, "id")
177
182
  stored = config.get(key) if isinstance(config, dict) else None
178
183
  outcome["warnings"] = [
179
184
  f"No safety backup was taken: {domain.removeprefix('helper_')} "
@@ -103,12 +103,16 @@ from .backup_helper_target import require_holds as _require_holds
103
103
  from .backup_helper_target import safety_target as _safety_target
104
104
  from .backup_integrations import fetch_integration, restore_integration
105
105
  from .backup_tags import restore_tag, tag_snapshot
106
+ from .backup_todo import current_key as todo_current_key
107
+ from .backup_todo import fetch_todo_item, restore_todo_item
108
+ from .backup_todo import snapshot_item as todo_snapshot_item
106
109
  from .backup_zones import fetch_zone, restore_zone
107
110
  from .client.rest_client import (
108
111
  HomeAssistantCommandError,
109
112
  HomeAssistantConnectionError,
110
113
  HomeAssistantError,
111
114
  )
115
+ from .errors import ErrorCode
112
116
  from .storage_helper_types import SIMPLE_HELPER_TYPES
113
117
  from .utils.data_paths import get_data_dir
114
118
  from .utils.registry_update_lock import registry_update_lock
@@ -197,6 +201,19 @@ class BackupRestoreError(HomeAssistantError):
197
201
  }
198
202
 
199
203
 
204
+ def restore_error_code(err: BackupRestoreError) -> ErrorCode:
205
+ """The error code a refused or failed restore is reported with."""
206
+ return {
207
+ "snapshot_not_found": ErrorCode.RESOURCE_NOT_FOUND,
208
+ "invalid_snapshot": ErrorCode.VALIDATION_INVALID_PARAMETER,
209
+ "unsupported_domain": ErrorCode.VALIDATION_INVALID_PARAMETER,
210
+ "backup_capture_failed": ErrorCode.BACKUP_CAPTURE_FAILED,
211
+ "entry_deleted": ErrorCode.RESOURCE_NOT_FOUND,
212
+ "entity_unavailable": ErrorCode.ENTITY_UNAVAILABLE,
213
+ "entity_not_found": ErrorCode.ENTITY_NOT_FOUND,
214
+ }.get(err.outcome.get("reason") or "", ErrorCode.SERVICE_CALL_FAILED)
215
+
216
+
200
217
  class InvalidBackupSnapshotError(ValueError):
201
218
  """Persisted snapshot data is invalid, independently of live HA access."""
202
219
 
@@ -1659,6 +1676,15 @@ class BackupManager:
1659
1676
 
1660
1677
  # ----- diff ----------------------------------------------------------
1661
1678
 
1679
+ async def _comparison_target(self, domain: str, data: dict[str, Any]) -> str | None:
1680
+ """The id the item a snapshot holds has now."""
1681
+ target: str = data["entity_id"]
1682
+ if domain == "entity":
1683
+ return await current_entity_id(self._client, target, data["config"])
1684
+ if domain == "todo_item":
1685
+ return todo_current_key(target, data["config"])
1686
+ return target
1687
+
1662
1688
  async def snapshot_comparison(self, name: str) -> tuple[dict[str, Any], Any]:
1663
1689
  """Read a snapshot and the live config for its stable target identity."""
1664
1690
  data = await asyncio.to_thread(self.read_snapshot, name)
@@ -1672,9 +1698,7 @@ class BackupManager:
1672
1698
  handler = self.handler_for(domain)
1673
1699
  if handler is None:
1674
1700
  raise LookupError(f"No diff handler registered for domain {domain!r}")
1675
- target = data["entity_id"]
1676
- if domain == "entity":
1677
- target = await current_entity_id(self._client, target, data["config"])
1701
+ target = await self._comparison_target(domain, data)
1678
1702
  current = await handler.fetch(self._client, target) if target else None
1679
1703
  if domain == "dashboard":
1680
1704
  _stored, legacy = dashboard_snapshot(data)
@@ -1693,6 +1717,11 @@ class BackupManager:
1693
1717
  # A snapshot from before registry icons were recorded: its restore
1694
1718
  # leaves the registry alone, so the icon is no difference.
1695
1719
  current.pop("registry_icon", None)
1720
+ if domain == "todo_item" and isinstance(data["config"], dict):
1721
+ current = todo_snapshot_item(data["config"], current)
1722
+ # Older snapshots carry the list's completion time, which the
1723
+ # fetch now leaves out.
1724
+ data["config"].pop("completed", None)
1696
1725
  if _is_flow_helper_domain(domain) and current is not None:
1697
1726
  # Both MCP and Settings preview this comparison. Registry metadata
1698
1727
  # is recreation-only; an existing-entry restore applies options.
@@ -2024,8 +2053,8 @@ async def _ws_send(client: Any, message: dict[str, Any]) -> Any:
2024
2053
  )
2025
2054
  # ``send_command`` returns ``{"success": True, "result": <inner>}``
2026
2055
  # — unwrap so fetch / restore handlers downstream see the inner
2027
- # shape directly (list for ``<type>/list`` calls, dict for
2028
- # ``execute_script`` calls, etc.). Without the unwrap the
2056
+ # shape directly (a list for the registry ``<type>/list`` calls, a dict
2057
+ # for others such as ``todo/item/list``). Without the unwrap the
2029
2058
  # ``_require_list`` checks in every fetch handler would see the
2030
2059
  # envelope as a non-list and raise a spurious degraded-fetch error.
2031
2060
  if isinstance(envelope, dict) and "result" in envelope:
@@ -2119,15 +2148,12 @@ def _require_list(value: Any, endpoint: str) -> list[Any]:
2119
2148
  def _require_dict(value: Any, endpoint: str) -> dict[str, Any]:
2120
2149
  """Return ``value`` if it's a dict, else raise.
2121
2150
 
2122
- Dict-shaped counterpart to :func:`_require_list` for the
2123
- ``execute_script``-backed fetchers (calendar / todo). Their service
2124
- response is a dict envelope; a non-dict body is a degraded/malformed
2125
- 200 (auth-scope change, API drift), not a genuine miss. Raising
2126
- funnels it through the diff tool's ``exception_to_structured_error``
2127
- and the capture pipeline's ``_CAPTURE_TRANSIENT_ERRORS`` warning,
2128
- instead of collapsing to ``None`` — which callers read as
2129
- ``entity_missing``. The genuine-miss signal stays the nested ``uid``
2130
- lookup returning ``None``.
2151
+ Dict-shaped counterpart to :func:`_require_list` for replies and rows
2152
+ that are dicts. A non-dict body is a degraded/malformed reply
2153
+ (auth-scope change, API drift), not a genuine miss. Raising funnels it
2154
+ through the diff tool's ``exception_to_structured_error`` and the
2155
+ capture pipeline's ``_CAPTURE_TRANSIENT_ERRORS`` warning, instead of
2156
+ collapsing to ``None`` — which callers read as ``entity_missing``.
2131
2157
  """
2132
2158
  if not isinstance(value, dict):
2133
2159
  raise HomeAssistantError(
@@ -2623,59 +2649,6 @@ async def _restore_area_or_floor(client: Any, entity_id: str, config: Any) -> An
2623
2649
  return await _ws_send(client, payload)
2624
2650
 
2625
2651
 
2626
- # Todo items — entity_id is "<todo.entity>::<item_uid>"
2627
-
2628
-
2629
- async def _fetch_todo_item(client: Any, entity_id: str) -> Any:
2630
- # The second segment is whatever the tool's ``item`` param carried.
2631
- # ha_set_todo_item / ha_remove_todo_item accept EITHER the item uid OR
2632
- # its exact summary/name, so this can be either form.
2633
- cal, _, item_ref = entity_id.partition("::")
2634
- if not cal or not item_ref:
2635
- return None
2636
- payload = {
2637
- "type": "execute_script",
2638
- "sequence": [
2639
- {
2640
- "service": "todo.get_items",
2641
- "target": {"entity_id": cal},
2642
- "response_variable": "items",
2643
- },
2644
- {"stop": "", "response_variable": "items"},
2645
- ],
2646
- }
2647
- try:
2648
- result = await _ws_send(client, payload)
2649
- except HomeAssistantError as err:
2650
- # Same narrow-to-404 rule as the calendar fetcher: only treat
2651
- # "todo entity not present" as a clean skip; let auth/transport
2652
- # errors propagate to the WARNING log via the manager's outer
2653
- # _CAPTURE_TRANSIENT_ERRORS catch.
2654
- if getattr(err, "status_code", None) == 404:
2655
- return None
2656
- raise
2657
- result = _require_dict(result, "execute_script")
2658
- items = result.get("response", {}).get("items", {}).get(cal, {}).get("items", [])
2659
- for item in items:
2660
- # Match either form. Matching only on uid silently skipped the
2661
- # snapshot whenever the caller passed the human-readable summary
2662
- # (the documented/common case, e.g. ha_remove_todo_item(list, "Buy
2663
- # milk")) — uid != summary, so the loop found nothing -> None.
2664
- if item.get("uid") == item_ref or item.get("summary") == item_ref:
2665
- return {"todo_entity_id": cal, **item}
2666
- return None
2667
-
2668
-
2669
- async def _restore_todo_item(client: Any, entity_id: str, config: Any) -> Any:
2670
- cal = config.get("todo_entity_id") or entity_id.split("::", 1)[0]
2671
- data = {k: v for k, v in config.items() if k != "todo_entity_id"}
2672
- return await _rest_post(
2673
- client,
2674
- "services/todo/add_item",
2675
- {"entity_id": cal, **data},
2676
- )
2677
-
2678
-
2679
2652
  # Devices — config/device_registry/{list,update}. ``ha_set_device`` mutates
2680
2653
  # the user-editable registry fields (name_by_user / area_id / disabled_by /
2681
2654
  # labels); restore re-applies exactly those. A device deleted by
@@ -3907,7 +3880,7 @@ def register_default_handlers(mgr: BackupManager, _client: Any) -> None:
3907
3880
  mgr.register(
3908
3881
  DomainHandler("area_or_floor", _fetch_area_or_floor, _restore_area_or_floor)
3909
3882
  )
3910
- mgr.register(DomainHandler("todo_item", _fetch_todo_item, _restore_todo_item))
3883
+ mgr.register(DomainHandler("todo_item", fetch_todo_item, restore_todo_item))
3911
3884
  mgr.register(DomainHandler("entity", fetch_entity, restore_entity))
3912
3885
  mgr.register(DomainHandler("device", _fetch_device, _restore_device))
3913
3886
  mgr.register(DomainHandler("integration", fetch_integration, restore_integration))
@@ -0,0 +1,379 @@
1
+ """Todo item backups: an item as Core's ``todo/item/list`` reports it.
2
+
3
+ The backup key is ``<todo entity>::<item>``, where ``item`` is the item's
4
+ uid (its summary when it has none); a backup from an earlier ha-mcp version
5
+ keys it by what the tool was given, which may be its summary. A key finds the
6
+ item with that uid, else the one Core's todo services act on for that value.
7
+ The snapshot is Core's item row (uid, summary, status, and description and due
8
+ where set) plus ``todo_entity_id``; it leaves out ``completed``, the time the
9
+ list sets when an item is completed, which follows the restored status. A
10
+ restore's safety backup and the diff follow the item by the snapshot's uid, so
11
+ a rename since the backup does not lose it.
12
+
13
+ An item still on the list under its uid gets its summary, status,
14
+ description and due back through ``todo.update_item``; a description or due
15
+ date the snapshot has none of is cleared. A removed item is added again with
16
+ ``todo.add_item`` and then given its status. When the component serves
17
+ ``todo_item``, both go through its bridge, which updates by uid and picks the
18
+ due field with Core's own date validator. A restore to a list Home Assistant
19
+ has not loaded, or to an unavailable one, is refused before anything is
20
+ written. The snapshot holds no position and Core's services cannot set a uid,
21
+ so a re-added item gets a new uid and goes where the list adds new items.
22
+ """
23
+
24
+ from __future__ import annotations
25
+
26
+ import logging
27
+ from typing import Any
28
+
29
+ from .backup_entities import fetch_entity
30
+ from .backup_entity_ids import _manager
31
+ from .client.rest_client import HomeAssistantCommandError, HomeAssistantError
32
+ from .config import get_global_settings
33
+ from .tools.component_todo import todo_item
34
+
35
+ _LIST = "todo/item/list"
36
+
37
+ logger = logging.getLogger(__name__)
38
+
39
+
40
+ class TodoListNotLoaded(HomeAssistantError):
41
+ """Home Assistant holds no loaded todo list under the entity id, so
42
+ whether the item is on it is unknown."""
43
+
44
+ def __init__(self, todo_entity: str) -> None:
45
+ super().__init__(f"Home Assistant has not loaded the todo list {todo_entity}")
46
+
47
+
48
+ def find_item(items: list[dict[str, Any]], ref: str) -> dict[str, Any] | None:
49
+ """The first item whose uid or summary is ``ref``, the one Core's todo
50
+ services act on for the same value."""
51
+ return next((i for i in items if ref in (i.get("uid"), i.get("summary"))), None)
52
+
53
+
54
+ async def list_items(client: Any, todo_entity: str) -> list[dict[str, Any]] | None:
55
+ """The list's items, or None when Core holds no such todo list."""
56
+ bm = _manager()
57
+ try:
58
+ result = await bm._ws_send(client, {"type": _LIST, "entity_id": todo_entity})
59
+ except HomeAssistantCommandError as err:
60
+ if err.code == "not_found":
61
+ return None
62
+ raise
63
+ items: list[dict[str, Any]] = bm._require_list(
64
+ bm._require_dict(result, _LIST).get("items"), _LIST
65
+ )
66
+ return items
67
+
68
+
69
+ async def _find(
70
+ client: Any, todo_entity: str, items: list[dict[str, Any]], ref: str
71
+ ) -> dict[str, Any] | None:
72
+ """The item with uid ``ref``, else the one Core resolves ``ref`` to."""
73
+ exact = next((i for i in items if i.get("uid") == ref), None)
74
+ if exact is not None:
75
+ return exact
76
+ reply = await todo_item(client, todo_entity, "resolve", refs=[ref])
77
+ if reply is None:
78
+ return find_item(items, ref)
79
+ if not reply.get("success"):
80
+ raise TodoListNotLoaded(todo_entity)
81
+ found: dict[str, Any] | None = reply["items"][0]
82
+ return found
83
+
84
+
85
+ async def fetch_todo_item(client: Any, entity_id: str) -> dict[str, Any] | None:
86
+ todo_entity, _, ref = entity_id.partition("::")
87
+ if not todo_entity or not ref:
88
+ return None
89
+ items = await list_items(client, todo_entity)
90
+ if items is None:
91
+ if await _list_gone(client, todo_entity):
92
+ return None
93
+ raise TodoListNotLoaded(todo_entity)
94
+ item = await _find(client, todo_entity, items, ref)
95
+ if not item:
96
+ return None
97
+ return {"todo_entity_id": todo_entity} | {
98
+ k: v for k, v in item.items() if k != "completed"
99
+ }
100
+
101
+
102
+ async def back_up_items(
103
+ client: Any, todo_entity: str, items: list[dict[str, Any] | None], tool_name: str
104
+ ) -> list[str]:
105
+ """Back up the given items, each under its uid (its summary when it has
106
+ none); returns why a backup that was due was not taken."""
107
+ settings = get_global_settings()
108
+ if not getattr(settings, "enable_auto_backup", False):
109
+ return []
110
+ refs = dict.fromkeys(
111
+ ref
112
+ for item in items
113
+ if item and (ref := item.get("uid") or item.get("summary"))
114
+ )
115
+ skipped: list[str] = []
116
+ bm = _manager()
117
+ try:
118
+ mgr = bm.get_backup_manager(client, settings)
119
+ for ref in refs:
120
+ await mgr.maybe_snapshot(
121
+ "todo_item",
122
+ f"{todo_entity}::{ref}",
123
+ tool_name=tool_name,
124
+ skip_reasons=skipped,
125
+ )
126
+ except bm._CAPTURE_TRANSIENT_ERRORS as err:
127
+ logger.warning("Todo item backup failed: %s", err)
128
+ skipped.append(f"No pre-write backup was taken: {type(err).__name__}")
129
+ return skipped
130
+
131
+
132
+ def unbacked_removals(
133
+ before: list[dict[str, Any]], after: list[dict[str, Any]] | None
134
+ ) -> list[str]:
135
+ """Why an item gone after ``remove_completed_items`` has no backup: Core
136
+ picks the completed items when it runs the service, so one completed
137
+ after the list was read and backed up is removed without a backup. An
138
+ item another client deleted meanwhile is named the same way."""
139
+ settings = get_global_settings()
140
+ if after is None or not getattr(settings, "enable_auto_backup", False):
141
+ return []
142
+ kept = {i.get("uid") for i in after}
143
+ return [
144
+ f"'{i.get('summary')}' is gone from the list, but it was not completed "
145
+ "when the list was read, so no backup of it was taken"
146
+ for i in before
147
+ if i.get("status") != "completed" and i.get("uid") not in kept
148
+ ]
149
+
150
+
151
+ def current_key(entity_id: str, config: Any) -> str:
152
+ """The key that finds the snapshot's item now: its uid where it has one."""
153
+ uid = config.get("uid") if isinstance(config, dict) else None
154
+ return f"{entity_id.partition('::')[0]}::{uid}" if uid else entity_id
155
+
156
+
157
+ async def safety_target(client: Any, entity_id: str, config: Any) -> str | None:
158
+ """The key a restore's safety backup is taken under; None when the item
159
+ is gone, since the restore then adds it again and overwrites nothing."""
160
+ key = current_key(entity_id, config)
161
+ bm = _manager()
162
+ try:
163
+ item = await fetch_todo_item(client, key)
164
+ except TodoListNotLoaded as err:
165
+ raise _unavailable(f"{err}; nothing was restored") from err
166
+ except bm._CAPTURE_TRANSIENT_ERRORS as err:
167
+ raise bm.MandatoryBackupError(
168
+ f"the todo list could not be read: {type(err).__name__}",
169
+ safe_detail="the todo list could not be read",
170
+ ) from err
171
+ return key if snapshot_item(config, item) else None
172
+
173
+
174
+ def snapshot_item(config: Any, item: dict[str, Any] | None) -> dict[str, Any] | None:
175
+ """``item`` when it is the snapshot's item: once the item with the
176
+ snapshot's uid is gone, a row named after that uid is another item."""
177
+ uid = config.get("uid") if isinstance(config, dict) else None
178
+ if item is None or (uid and item.get("uid") != uid):
179
+ return None
180
+ return item
181
+
182
+
183
+ def _due_field(due: str) -> str:
184
+ # Core lists a due datetime as an ISO datetime with a 'T', a due date
185
+ # without one.
186
+ return "due_datetime" if "T" in due else "due_date"
187
+
188
+
189
+ def _description(snapshot: dict[str, Any], current: dict[str, Any]) -> dict[str, Any]:
190
+ """The description as the snapshot had it. One only the current item has
191
+ is sent as None, which Core takes as a clear; one neither has is left
192
+ out, since Core refuses a field the list does not support."""
193
+ if snapshot.get("description") is not None:
194
+ return {"description": snapshot["description"]}
195
+ if current.get("description") is not None:
196
+ return {"description": None}
197
+ return {}
198
+
199
+
200
+ def _field_values(snapshot: dict[str, Any], current: dict[str, Any]) -> dict[str, Any]:
201
+ """Description and due as the snapshot had them, for Core's services."""
202
+ fields = _description(snapshot, current)
203
+ if (due := snapshot.get("due")) is not None:
204
+ fields[_due_field(due)] = due
205
+ elif (current_due := current.get("due")) is not None:
206
+ fields[_due_field(current_due)] = None
207
+ return fields
208
+
209
+
210
+ def service_message(
211
+ service: str, todo_entity: str, data: dict[str, Any]
212
+ ) -> dict[str, Any]:
213
+ """A WebSocket ``call_service`` of todo.<service> on one list."""
214
+ return {
215
+ "type": "call_service",
216
+ "domain": "todo",
217
+ "service": service,
218
+ "target": {"entity_id": todo_entity},
219
+ "service_data": data,
220
+ }
221
+
222
+
223
+ async def _call(
224
+ client: Any, todo_entity: str, service: str, data: dict[str, Any]
225
+ ) -> Any:
226
+ return await _manager()._ws_send(
227
+ client, service_message(service, todo_entity, data)
228
+ )
229
+
230
+
231
+ def _not_applied(message: str, **outcome: Any) -> HomeAssistantError:
232
+ error: HomeAssistantError = _manager().BackupRestoreError(
233
+ message, apply_status="not_applied", **outcome
234
+ )
235
+ return error
236
+
237
+
238
+ def _unavailable(message: str) -> HomeAssistantError:
239
+ return _not_applied(message, reason="entity_unavailable")
240
+
241
+
242
+ async def _list_gone(client: Any, todo_entity: str) -> bool:
243
+ """Whether Home Assistant no longer has the list. Core answers a deleted
244
+ list as one it has not loaded. A deleted list has neither a state nor a
245
+ registry entry; a disabled one keeps its entry. So does a list without a
246
+ unique id that Home Assistant has not loaded, which is taken as deleted."""
247
+ state = await _manager()._rest_get_or_none(client, f"states/{todo_entity}")
248
+ return state is None and await fetch_entity(client, todo_entity) is None
249
+
250
+
251
+ async def _require_available(client: Any, todo_entity: str) -> None:
252
+ # Core skips an unavailable list: a write changes nothing and succeeds.
253
+ state = await _manager()._rest_get_or_none(client, f"states/{todo_entity}")
254
+ if state is None and await fetch_entity(client, todo_entity) is None:
255
+ raise _not_applied(
256
+ f"Todo list {todo_entity} no longer exists", reason="entity_not_found"
257
+ )
258
+ if state is not None and state.get("state") == "unavailable":
259
+ raise _unavailable(
260
+ f"Todo list {todo_entity} is unavailable, so nothing would be restored"
261
+ )
262
+
263
+
264
+ async def _completed_again(todo_entity: str, summary: Any, mark: Any) -> Any:
265
+ """Mark a re-added item completed. The add is applied by then, so any
266
+ failure says so, since restoring again would add the item twice."""
267
+ try:
268
+ return await mark()
269
+ except Exception as err:
270
+ raise HomeAssistantError(
271
+ f"Re-added {summary!r} to {todo_entity}, but marking it completed "
272
+ f"failed or got no answer ({err}); check its status before restoring "
273
+ "again, which would add it a second time"
274
+ ) from err
275
+
276
+
277
+ async def _restore_by_bridge(
278
+ client: Any, todo_entity: str, config: Any, current: dict[str, Any] | None
279
+ ) -> Any:
280
+ """The restore through the component, an update going by uid; None when
281
+ the component does not serve it."""
282
+ summary = config.get("summary")
283
+ status = config.get("status")
284
+ if current is not None:
285
+ action = "update"
286
+ data = {"rename": summary, "status": status} | _description(config, current)
287
+ fields = {"uid": current["uid"], "data": data}
288
+ else:
289
+ action = "add"
290
+ fields = {"data": {"item": summary} | _description(config, {})}
291
+ reply = await todo_item(
292
+ client, todo_entity, action, due=config.get("due"), **fields
293
+ )
294
+ if reply is None:
295
+ return None
296
+ if not reply.get("success"):
297
+ message = (reply.get("error") or {}).get("message", "Unknown error")
298
+ raise _not_applied(f"{message}; nothing was restored")
299
+ if current is not None or status != "completed":
300
+ return reply
301
+
302
+ async def mark() -> Any:
303
+ if reply["item"] is None:
304
+ raise HomeAssistantError("the re-added item could not be told apart")
305
+ marked = await todo_item(
306
+ client,
307
+ todo_entity,
308
+ "update",
309
+ uid=reply["item"]["uid"],
310
+ data={"status": status},
311
+ )
312
+ if not marked or not marked.get("success"):
313
+ error = (marked or {}).get("error") or {}
314
+ raise HomeAssistantError(
315
+ error.get("message", "the component did not run it")
316
+ )
317
+ return marked
318
+
319
+ return await _completed_again(todo_entity, summary, mark)
320
+
321
+
322
+ async def restore_todo_item(client: Any, entity_id: str, config: Any) -> Any:
323
+ # The list comes from the backup key, which the safety backup also uses.
324
+ todo_entity = entity_id.partition("::")[0]
325
+ uid = config.get("uid")
326
+ summary = config.get("summary")
327
+ status = config.get("status")
328
+ await _require_available(client, todo_entity)
329
+ items = await list_items(client, todo_entity)
330
+ if items is None:
331
+ raise _unavailable(f"{TodoListNotLoaded(todo_entity)}; nothing was restored")
332
+ current = (
333
+ next((i for i in items if i.get("uid") == uid), None)
334
+ if uid
335
+ else find_item(items, summary)
336
+ )
337
+ if current is None or current.get("uid"):
338
+ result = await _restore_by_bridge(client, todo_entity, config, current)
339
+ if result is not None:
340
+ return result
341
+ if current is not None:
342
+ if uid and find_item(items, uid) is not current:
343
+ raise _not_applied(
344
+ f"Another item on {todo_entity} is named {uid!r}, so Home "
345
+ "Assistant would update that one; nothing was restored"
346
+ )
347
+ return await _call(
348
+ client,
349
+ todo_entity,
350
+ "update_item",
351
+ {"item": uid or summary, "rename": summary, "status": status}
352
+ | _field_values(config, current),
353
+ )
354
+
355
+ result = await _call(
356
+ client, todo_entity, "add_item", {"item": summary} | _field_values(config, {})
357
+ )
358
+ if status != "completed":
359
+ return result
360
+ known = {i.get("uid") for i in items}
361
+
362
+ async def mark() -> Any:
363
+ after = await list_items(client, todo_entity) or []
364
+ added = [i for i in after if i.get("uid") not in known]
365
+ if (
366
+ len(added) != 1
367
+ or not added[0].get("uid")
368
+ or added[0].get("summary") != summary
369
+ or find_item(after, added[0]["uid"]) is not added[0]
370
+ ):
371
+ raise HomeAssistantError("the re-added item could not be told apart")
372
+ return await _call(
373
+ client,
374
+ todo_entity,
375
+ "update_item",
376
+ {"item": added[0]["uid"], "status": status},
377
+ )
378
+
379
+ return await _completed_again(todo_entity, summary, mark)
@@ -33,7 +33,9 @@ from ..backup_manager import (
33
33
  _FlowHelperReadError,
34
34
  _snapshot_validation_message,
35
35
  get_backup_manager,
36
+ restore_error_code,
36
37
  )
38
+ from ..backup_todo import TodoListNotLoaded
37
39
  from ..config import (
38
40
  BACKUP_OVERRIDE_FIELDS,
39
41
  _reset_global_settings,
@@ -142,6 +144,8 @@ async def _diff_backup(
142
144
  return _bad_request(_snapshot_validation_message(err))
143
145
  except LookupError as err:
144
146
  return _bad_request(str(err), code=ErrorCode.RESOURCE_NOT_FOUND, status=404)
147
+ except TodoListNotLoaded as err:
148
+ return _bad_request(str(err), code=ErrorCode.ENTITY_UNAVAILABLE, status=409)
145
149
  except _FlowHelperReadError as err:
146
150
  return JSONResponse(
147
151
  create_error_response(
@@ -204,13 +208,7 @@ async def _restore_backup(
204
208
  except (ValueError, LookupError) as err:
205
209
  return _bad_request(str(err))
206
210
  except BackupRestoreError as err:
207
- code = {
208
- "snapshot_not_found": ErrorCode.RESOURCE_NOT_FOUND,
209
- "invalid_snapshot": ErrorCode.VALIDATION_INVALID_PARAMETER,
210
- "unsupported_domain": ErrorCode.VALIDATION_INVALID_PARAMETER,
211
- "backup_capture_failed": ErrorCode.BACKUP_CAPTURE_FAILED,
212
- "entry_deleted": ErrorCode.RESOURCE_NOT_FOUND,
213
- }.get(err.outcome.get("reason") or "", ErrorCode.SERVICE_CALL_FAILED)
211
+ code = restore_error_code(err)
214
212
  return JSONResponse(
215
213
  create_error_response(
216
214
  code,
@@ -229,6 +227,7 @@ async def _restore_backup(
229
227
  ),
230
228
  status_code={
231
229
  ErrorCode.RESOURCE_NOT_FOUND: 404,
230
+ ErrorCode.ENTITY_NOT_FOUND: 404,
232
231
  ErrorCode.VALIDATION_INVALID_PARAMETER: 400,
233
232
  }.get(code, 409),
234
233
  )