ha-mcp-dev 9.0.0.dev3116__tar.gz → 9.0.0.dev3120__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 (796) hide show
  1. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/PKG-INFO +1 -1
  2. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/pyproject.toml +1 -1
  3. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/pyproject.toml.orig +1 -1
  4. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/requirements.txt +1 -1
  5. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +14 -14
  6. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/VENDORED +1 -1
  7. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/asyncio/client.py +4 -2
  8. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/asyncio/server.py +22 -10
  9. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +22 -8
  10. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/frames.py +66 -47
  11. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/legacy/http.py +3 -1
  12. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/proxy.py +6 -7
  13. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/sync/client.py +2 -2
  14. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/sync/connection.py +20 -0
  15. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/sync/server.py +18 -9
  16. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/trio/client.py +2 -2
  17. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/trio/server.py +8 -5
  18. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/uri.py +5 -6
  19. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/version.py +1 -1
  20. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/LICENSE +0 -0
  21. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/README.md +0 -0
  22. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/__init__.py +0 -0
  23. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/__main__.py +0 -0
  24. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_pypi_marker +0 -0
  25. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_rich_compat.py +0 -0
  26. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/__init__.py +0 -0
  27. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
  28. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
  29. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
  30. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
  31. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
  32. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
  33. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
  34. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
  35. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
  36. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
  37. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
  38. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
  39. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
  40. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
  41. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
  42. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
  43. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
  44. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
  45. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
  46. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev_security.py +0 -0
  47. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
  48. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
  49. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
  50. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
  51. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
  52. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
  53. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
  54. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
  55. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
  56. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
  57. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
  58. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
  59. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
  60. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
  61. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
  62. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
  63. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
  64. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
  65. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
  66. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
  67. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
  68. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
  69. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
  70. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
  71. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
  72. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
  73. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
  74. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
  75. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
  76. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
  77. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
  78. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
  79. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
  80. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
  81. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
  82. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
  83. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
  84. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
  85. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
  86. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
  87. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
  88. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
  89. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
  90. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
  91. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
  92. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
  93. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
  94. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
  95. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
  96. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
  97. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
  98. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
  99. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
  100. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
  101. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
  102. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
  103. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
  104. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
  105. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
  106. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
  107. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
  108. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
  109. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
  110. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
  111. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
  112. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
  113. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
  114. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
  115. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
  116. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
  117. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
  118. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
  119. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
  120. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
  121. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
  122. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
  123. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
  124. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
  125. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/jev_search.py +0 -0
  126. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
  127. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
  128. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
  129. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
  130. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
  131. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
  132. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
  133. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
  134. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
  135. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
  136. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
  137. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
  138. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
  139. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
  140. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
  141. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
  142. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
  143. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
  144. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
  145. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
  146. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
  147. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
  148. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
  149. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
  150. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
  151. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
  152. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
  153. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
  154. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
  155. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
  156. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
  157. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
  158. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
  159. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
  160. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
  161. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
  162. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
  163. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
  164. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
  165. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
  166. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
  167. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
  168. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
  169. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
  170. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
  171. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
  172. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
  173. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
  174. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
  175. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
  176. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
  177. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
  178. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
  179. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
  180. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
  181. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
  182. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
  183. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
  184. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
  185. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
  186. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
  187. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
  188. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
  189. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
  190. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
  191. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
  192. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
  193. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
  194. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
  195. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
  196. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
  197. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
  198. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/mixins/extensions.py +0 -0
  199. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
  200. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
  201. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
  202. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
  203. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
  204. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
  205. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
  206. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
  207. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
  208. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
  209. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
  210. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
  211. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
  212. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
  213. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
  214. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
  215. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
  216. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
  217. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
  218. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
  219. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
  220. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
  221. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
  222. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
  223. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
  224. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
  225. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
  226. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
  227. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
  228. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
  229. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
  230. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
  231. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
  232. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
  233. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
  234. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
  235. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
  236. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
  237. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
  238. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
  239. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
  240. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
  241. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
  242. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
  243. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
  244. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
  245. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
  246. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
  247. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
  248. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
  249. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
  250. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
  251. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
  252. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
  253. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
  254. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
  255. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
  256. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
  257. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
  258. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
  259. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
  260. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
  261. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
  262. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
  263. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
  264. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
  265. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
  266. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
  267. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
  268. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
  269. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
  270. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
  271. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
  272. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
  273. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
  274. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
  275. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
  276. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
  277. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
  278. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
  279. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
  280. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
  281. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
  282. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
  283. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
  284. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
  285. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
  286. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
  287. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
  288. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
  289. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
  290. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
  291. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
  292. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
  293. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
  294. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
  295. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
  296. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
  297. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
  298. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
  299. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
  300. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
  301. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
  302. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
  303. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
  304. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
  305. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
  306. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
  307. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
  308. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
  309. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
  310. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
  311. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
  312. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
  313. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
  314. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
  315. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
  316. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
  317. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
  318. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
  319. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
  320. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
  321. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
  322. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
  323. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
  324. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
  325. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
  326. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
  327. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
  328. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
  329. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
  330. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
  331. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
  332. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
  333. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
  334. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
  335. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
  336. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
  337. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
  338. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
  339. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
  340. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
  341. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
  342. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
  343. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
  344. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
  345. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
  346. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
  347. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
  348. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
  349. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
  350. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
  351. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
  352. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
  353. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
  354. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
  355. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
  356. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
  357. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
  358. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
  359. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
  360. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
  361. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
  362. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
  363. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
  364. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
  365. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
  366. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
  367. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
  368. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
  369. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
  370. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
  371. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
  372. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
  373. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
  374. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
  375. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
  376. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
  377. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
  378. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
  379. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
  380. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
  381. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
  382. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
  383. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
  384. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
  385. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
  386. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
  387. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
  388. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
  389. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
  390. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
  391. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
  392. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
  393. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
  394. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
  395. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
  396. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
  397. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
  398. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
  399. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
  400. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
  401. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
  402. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
  403. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
  404. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/shared/_request_clock.py +0 -0
  405. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
  406. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
  407. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
  408. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
  409. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
  410. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
  411. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
  412. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
  413. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
  414. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
  415. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
  416. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
  417. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
  418. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
  419. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
  420. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
  421. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
  422. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
  423. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
  424. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
  425. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
  426. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
  427. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
  428. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
  429. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
  430. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
  431. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
  432. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
  433. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
  434. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
  435. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
  436. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
  437. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
  438. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
  439. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
  440. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
  441. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
  442. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
  443. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
  444. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
  445. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
  446. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
  447. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
  448. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
  449. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
  450. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/client.py +0 -0
  451. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
  452. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
  453. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
  454. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
  455. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
  456. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
  457. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
  458. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
  459. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
  460. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
  461. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
  462. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
  463. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
  464. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
  465. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
  466. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
  467. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
  468. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
  469. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/server.py +0 -0
  470. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
  471. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
  472. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
  473. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
  474. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
  475. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
  476. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
  477. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
  478. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
  479. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
  480. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
  481. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
  482. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/_version.py +0 -0
  483. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/app_discovery.py +0 -0
  484. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/auth/__init__.py +0 -0
  485. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/auth/consent_form.py +0 -0
  486. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/auth/oidc_compat.py +0 -0
  487. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/auth/provider.py +0 -0
  488. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/backup_dashboards.py +0 -0
  489. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/backup_diff.py +0 -0
  490. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/backup_entity_ids.py +0 -0
  491. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/backup_helper_target.py +0 -0
  492. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/backup_integrations.py +0 -0
  493. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/backup_manager.py +0 -0
  494. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/backup_tags.py +0 -0
  495. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/backup_zones.py +0 -0
  496. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/browser_landing.py +0 -0
  497. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/client/__init__.py +0 -0
  498. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/client/admin_routes.py +0 -0
  499. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/client/models.py +0 -0
  500. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/client/rest_client.py +0 -0
  501. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/client/supervisor_client.py +0 -0
  502. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/client/websocket_client.py +0 -0
  503. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/client/websocket_listener.py +0 -0
  504. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/config.py +0 -0
  505. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/config_backup.py +0 -0
  506. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/config_meta.py +0 -0
  507. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/config_overrides.py +0 -0
  508. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/config_registry.py +0 -0
  509. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/config_settings.py +0 -0
  510. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
  511. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
  512. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
  513. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
  514. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
  515. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
  516. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/errors.py +0 -0
  517. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/ha_request_queue.py +0 -0
  518. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/hacs_auto_refresh.py +0 -0
  519. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/http_transport.py +0 -0
  520. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/image_info.py +0 -0
  521. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/llm_exposure.py +0 -0
  522. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/log_filters.py +0 -0
  523. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/policy/__init__.py +0 -0
  524. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/policy/approval_queue.py +0 -0
  525. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/policy/decision_pin.py +0 -0
  526. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/policy/decisions.py +0 -0
  527. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/policy/editing.py +0 -0
  528. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/policy/evaluator.py +0 -0
  529. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/policy/events.py +0 -0
  530. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/policy/handlers.py +0 -0
  531. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/policy/middleware.py +0 -0
  532. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/policy/model.py +0 -0
  533. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/policy/mrtr.py +0 -0
  534. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/policy/persistence.py +0 -0
  535. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/policy/server_channels.py +0 -0
  536. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/policy/value_sources.py +0 -0
  537. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/py.typed +0 -0
  538. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/read_only.py +0 -0
  539. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/redaction.py +0 -0
  540. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/renamed_tools.py +0 -0
  541. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  542. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  543. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
  544. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-actions.md +0 -0
  545. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
  546. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
  547. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  548. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  549. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  550. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  551. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  552. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  553. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  554. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
  555. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  556. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/triggers-and-conditions.md +0 -0
  557. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
  558. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/server.py +0 -0
  559. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/server_instructions.py +0 -0
  560. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/server_lifespan.py +0 -0
  561. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/server_tool_text.py +0 -0
  562. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/settings_ui/__init__.py +0 -0
  563. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
  564. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
  565. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
  566. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/settings_ui/_handlers_oauth_callbacks.py +0 -0
  567. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
  568. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
  569. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
  570. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/settings_ui/_i18n.py +0 -0
  571. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
  572. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/settings_ui/_persistence.py +0 -0
  573. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
  574. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/settings_ui/_theme.py +0 -0
  575. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
  576. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/settings_ui/locales/README.md +0 -0
  577. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/settings_ui/locales/az.json +0 -0
  578. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
  579. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/settings_ui/locales/de.json +0 -0
  580. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/settings_ui/locales/en.json +0 -0
  581. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
  582. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/settings_ui/locales/es.json +0 -0
  583. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
  584. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/settings_ui/locales/it.json +0 -0
  585. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
  586. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
  587. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
  588. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
  589. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
  590. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
  591. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
  592. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
  593. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/settings_ui/settings.css +0 -0
  594. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/settings_ui/settings.html +0 -0
  595. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/settings_ui/settings_js/01_i18n_state.js +0 -0
  596. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/settings_ui/settings_js/02_tools_restart.js +0 -0
  597. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/settings_ui/settings_js/03_render_save.js +0 -0
  598. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/settings_ui/settings_js/04_backups.js +0 -0
  599. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/settings_ui/settings_js/05_feature_flags.js +0 -0
  600. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/settings_ui/settings_js/06_policy_cards.js +0 -0
  601. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/settings_ui/settings_js/07_policy_actions.js +0 -0
  602. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/settings_ui/settings_js/08_advanced.js +0 -0
  603. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/settings_ui/settings_js/09_prefs_visibility.js +0 -0
  604. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/settings_ui/settings_js/10_oauth_callbacks.js +0 -0
  605. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/smoke_test.py +0 -0
  606. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  607. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/strict_bps.py +0 -0
  608. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tool_dispatch.py +0 -0
  609. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/__init__.py +0 -0
  610. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/area_messages.py +0 -0
  611. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/auto_backup.py +0 -0
  612. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/backup.py +0 -0
  613. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/backup_access.py +0 -0
  614. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/backup_on_demand.py +0 -0
  615. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  616. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/best_practice_result.py +0 -0
  617. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/best_practice_variables.py +0 -0
  618. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/blueprint_sources.py +0 -0
  619. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
  620. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/blueprint_write.py +0 -0
  621. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/bug_report_config.py +0 -0
  622. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/bug_report_templates.py +0 -0
  623. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/bulk_selector.py +0 -0
  624. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/coercion.py +0 -0
  625. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/component_api.py +0 -0
  626. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/component_config_entries.py +0 -0
  627. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/component_config_reads.py +0 -0
  628. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
  629. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/component_devices.py +0 -0
  630. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/component_helper_collections.py +0 -0
  631. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/component_registries.py +0 -0
  632. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
  633. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/config_entry_backup.py +0 -0
  634. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/config_entry_flow.py +0 -0
  635. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
  636. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/config_entry_flow_introspect.py +0 -0
  637. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
  638. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
  639. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/config_entry_identity.py +0 -0
  640. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
  641. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
  642. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/config_helpers/__init__.py +0 -0
  643. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/config_helpers/core_payload.py +0 -0
  644. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/config_helpers/create.py +0 -0
  645. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/config_helpers/describe.py +0 -0
  646. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/config_helpers/flow.py +0 -0
  647. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/config_helpers/icon_route.py +0 -0
  648. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/config_helpers/listing.py +0 -0
  649. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/config_helpers/registry.py +0 -0
  650. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/config_helpers/schemas.py +0 -0
  651. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/config_helpers/typed_config.py +0 -0
  652. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/config_helpers/update.py +0 -0
  653. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/config_helpers/validation.py +0 -0
  654. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/config_subentry_restore.py +0 -0
  655. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/config_write_errors.py +0 -0
  656. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/config_write_helpers.py +0 -0
  657. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/core_contract.py +0 -0
  658. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/dashboard_card_describe.py +0 -0
  659. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
  660. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/dashboard_list_checks.py +0 -0
  661. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/dev_backup.py +0 -0
  662. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/device_control.py +0 -0
  663. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/device_enrichment.py +0 -0
  664. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/diagnostics_helpers.py +0 -0
  665. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/energy_preferences.py +0 -0
  666. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/entity_param_parsing.py +0 -0
  667. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/entity_registration.py +0 -0
  668. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/entity_removal.py +0 -0
  669. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/entity_update_fields.py +0 -0
  670. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/error_log_parsing.py +0 -0
  671. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/flow_helper_lookup.py +0 -0
  672. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/hacs_registration.py +0 -0
  673. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/helper_flows.py +0 -0
  674. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/helpers.py +0 -0
  675. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/history_response.py +0 -0
  676. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/integration_entry_state.py +0 -0
  677. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
  678. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/log_common.py +0 -0
  679. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/log_sources.py +0 -0
  680. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/log_sources_fault.py +0 -0
  681. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/log_sources_logbook.py +0 -0
  682. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
  683. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/radio/__init__.py +0 -0
  684. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/radio/base.py +0 -0
  685. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/radio/matter.py +0 -0
  686. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/radio/thread.py +0 -0
  687. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/radio/zigbee.py +0 -0
  688. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/radio/zwave.py +0 -0
  689. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/radio/zwave_parameters.py +0 -0
  690. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/recorder_errors.py +0 -0
  691. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/reference_validator.py +0 -0
  692. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/registry.py +0 -0
  693. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
  694. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/response_helpers.py +0 -0
  695. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/scene_discovery.py +0 -0
  696. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/search/__init__.py +0 -0
  697. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/search/base.py +0 -0
  698. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/search/component.py +0 -0
  699. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/search/entities.py +0 -0
  700. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/search/legacy.py +0 -0
  701. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/search/modes.py +0 -0
  702. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/search/overview.py +0 -0
  703. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/search/response.py +0 -0
  704. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/search/state.py +0 -0
  705. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/server_version.py +0 -0
  706. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  707. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  708. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  709. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
  710. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  711. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  712. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
  713. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  714. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  715. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  716. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/statistics_calendar.py +0 -0
  717. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/statistics_helpers.py +0 -0
  718. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/statistics_resets.py +0 -0
  719. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/system_restart.py +0 -0
  720. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/tool_hints.py +0 -0
  721. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
  722. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/tools_addons.py +0 -0
  723. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/tools_areas.py +0 -0
  724. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
  725. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  726. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  727. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/tools_calendar.py +0 -0
  728. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/tools_camera.py +0 -0
  729. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/tools_categories.py +0 -0
  730. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/tools_code.py +0 -0
  731. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/tools_config_automations.py +0 -0
  732. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
  733. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  734. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
  735. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
  736. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
  737. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/tools_dev.py +0 -0
  738. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/tools_energy.py +0 -0
  739. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/tools_entities.py +0 -0
  740. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  741. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/tools_groups.py +0 -0
  742. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/tools_hacs.py +0 -0
  743. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/tools_history.py +0 -0
  744. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/tools_integrations.py +0 -0
  745. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/tools_labels.py +0 -0
  746. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/tools_logs.py +0 -0
  747. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/tools_radio.py +0 -0
  748. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/tools_registry.py +0 -0
  749. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/tools_resources.py +0 -0
  750. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/tools_search.py +0 -0
  751. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/tools_security_policy.py +0 -0
  752. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/tools_service.py +0 -0
  753. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/tools_services.py +0 -0
  754. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/tools_system.py +0 -0
  755. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/tools_themes.py +0 -0
  756. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/tools_todo.py +0 -0
  757. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/tools_traces.py +0 -0
  758. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/tools_updates.py +0 -0
  759. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/tools_utility.py +0 -0
  760. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  761. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  762. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
  763. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/tools_zones.py +0 -0
  764. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/util_helpers.py +0 -0
  765. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/validation_middleware.py +0 -0
  766. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/tools/ws_waiters.py +0 -0
  767. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/transforms/__init__.py +0 -0
  768. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/transforms/categorized_search.py +0 -0
  769. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/transforms/compact_params.py +0 -0
  770. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/transforms/component_helpers.py +0 -0
  771. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/transforms/component_search.py +0 -0
  772. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  773. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/transforms/write_tool_note.py +0 -0
  774. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/transport_security.py +0 -0
  775. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/update_check.py +0 -0
  776. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/utils/__init__.py +0 -0
  777. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/utils/config_hash.py +0 -0
  778. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/utils/config_write_lock.py +0 -0
  779. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/utils/dashboard_patch.py +0 -0
  780. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/utils/data_paths.py +0 -0
  781. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
  782. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/utils/domain_handlers.py +0 -0
  783. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/utils/entity_membership.py +0 -0
  784. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  785. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  786. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/utils/mcp_client_host.py +0 -0
  787. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/utils/operation_manager.py +0 -0
  788. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/utils/python_sandbox.py +0 -0
  789. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/utils/registry_update_lock.py +0 -0
  790. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/utils/skill_loader.py +0 -0
  791. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/utils/usage_logger.py +0 -0
  792. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/visibility/__init__.py +0 -0
  793. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/visibility/enforcement.py +0 -0
  794. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/visibility/model.py +0 -0
  795. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/visibility/persistence.py +0 -0
  796. {ha_mcp_dev-9.0.0.dev3116 → ha_mcp_dev-9.0.0.dev3120}/src/ha_mcp/visibility/resolver.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ha-mcp-dev
3
- Version: 9.0.0.dev3116
3
+ Version: 9.0.0.dev3120
4
4
  Summary: Home Assistant MCP Server - Complete control of Home Assistant through MCP
5
5
  Keywords: mcp,home-assistant,ai,automation,smart-home
6
6
  Author: Julien
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "9.0.0.dev3116"
7
+ version = "9.0.0.dev3120"
8
8
  description = "Home Assistant MCP Server - Complete control of Home Assistant through MCP"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13,<3.15"
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "9.0.0.dev3116"
7
+ version = "9.0.0.dev3120"
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
@@ -5,7 +5,7 @@
5
5
  # scripts/vendor_fastmcp.py (fastmcp-slim, mcp, mcp-types) before committing
6
6
  # a bump; tests/src/unit/test_vendored_*.py reject stale or altered trees.
7
7
  # For a manual pin change, run the same generator and commit its outputs.
8
- websockets==17.1
8
+ websockets==17.2
9
9
  fastmcp-slim==4.1.0
10
10
  mcp==2.3.0
11
11
  mcp-types==2.3.0
@@ -1,13 +1,13 @@
1
1
  3d6a0c050d8bec52fabad502e45fb25bd02bcadbd70dea34d447b6a0ff4e6da8 LICENSE
2
- e7a0229f98e8331a0e109d2e5a05d98fe445782329e54e418d0312589687c5af VENDORED
2
+ a6c00001a575dfb862e0d167e507325c4639b0c87ee7a337b0c734422727a404 VENDORED
3
3
  ce6042263ec421ae99244403a787487739dfcc025403c756e35fa3ec49be4034 __init__.py
4
4
  c2ee4ddb093c9af060cafaf68219907f8a6b7b301ed3f8bea75db7555adec987 __main__.py
5
5
  e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 asyncio/__init__.py
6
- 76cd6b1f39464325281925529b466d73640be5c2ce8942bdf79edb3b42baf8e6 asyncio/client.py
6
+ 581192ec6ae3781ac4968b6ec38e64502ff1acfe38f72ba2a7d4c2066d7216b1 asyncio/client.py
7
7
  f2eb6ad56371fab33839a7ad2694e4b5610bea839bf92ae1f76e6d0a63f1e346 asyncio/connection.py
8
8
  bc13ddf7722e2f72c4d0e4b179a202223cefca886de7792687efd9868f9b1b35 asyncio/messages.py
9
9
  2453543482e4001e4ff5fb7a3cba2035a66aea9f765b3d7dbc89717f1d434e58 asyncio/router.py
10
- df846da778379c058b0da052731b9ba1f73390da0320c33330f03074b14ac6fc asyncio/server.py
10
+ f5aab916ff9bf604c77c8635879e80e223489ba05eaf921002471d5421316373 asyncio/server.py
11
11
  53f2709a7e7d65143a11e7293af322cd0086fd96c0be051fd6293b85a6510b77 auth.py
12
12
  7d87f462aad6231fe224303e45675cce1e6f8cef69e99c59be613beb56d4420d cli.py
13
13
  eaf4e66220a92297bc794adc98494e63ea0aae21fa394c72a7e846a535af3cc7 client.py
@@ -16,8 +16,8 @@ eaf4e66220a92297bc794adc98494e63ea0aae21fa394c72a7e846a535af3cc7 client.py
16
16
  b69d3f132a907ddec260d3879b102278e1fc11df4f49016dd7c7be0ae45e4ce6 exceptions.py
17
17
  42466cc5a255965552a75ba1743e6e3c689b75bc7fd3dd46ad555f4b92d7729c extensions/__init__.py
18
18
  24d7f2939e370bb56e3c7d103a86e2a8aa06af38c920b8deeaccf920bbce3e5e extensions/base.py
19
- 2005dd08663ad337dd8dab4a77a7c37d3322cce79062c9e1d3306d2fdbcfbb30 extensions/permessage_deflate.py
20
- 4f08aa9ff6eebd089b94446e81c4fe3039a73d9ee4b7e14c5c449ed8384e4fda frames.py
19
+ d97d5fdd3e47b8e4176d89e61d7f8c937ab5b76d67f94fc585f8d2ea81c189bc extensions/permessage_deflate.py
20
+ 62cb106e8c23dbadf19bb5e74006a18dc4650381ddcb5592058b61b1fc7c10fb frames.py
21
21
  c909cf963559c15d7f57ea4e49128d2c6feef36ef0142d61ef671c8a88dc43c3 headers.py
22
22
  b4b56e36f3400f0b7c775ba2e4a305299099313b49e82a9766f7a880b68f6dfd http11.py
23
23
  4ff07d4d4987a1c78a310f8f36985d410007d97771031c1240d790120a882e41 imports.py
@@ -27,29 +27,29 @@ e6826ead47333dd7578bc45d7b97c0da10f7578a67bfffd9eb8a514573fa1c1b legacy/client.
27
27
  562123a684f4f5fcf1fd9a9fd1a3460d5b510cd8d768ec3481d0ad6b72e48c57 legacy/exceptions.py
28
28
  6f4c0cc7cdd74c85d56683bad299770226ca1db4250dbeeb040ca114491a3029 legacy/framing.py
29
29
  d8dcebe40376c6f0c2e4474d3fe901de539cac069436562e8fffa1aff8efee93 legacy/handshake.py
30
- 70e0909835a120a4269bc5161973d6ec20d9834df08e8802b1bd0b3fda1eb4d4 legacy/http.py
30
+ e51bb9a87d5dc09f440c0879f82089688eca021ae4e63edf554ffadf2e4a7de2 legacy/http.py
31
31
  dcc4e1d7ed24b564ad4425f4d252d5ebd80bcc5ffd8009fc60b144fdb664cd8c legacy/protocol.py
32
32
  8529389c54ec23778c45bbb925c2388177a2f546f0d3b452ad28ed2f878cda07 legacy/server.py
33
33
  dc7b8204c2d324cc69f491dde49301aad4c5f384ac636f62b871f4cb39ee0ff4 protocol.py
34
- a05adb118b5ab185aff960dc9e239b0fd9c1479439aa41e9c8254b9e0c7b58c4 proxy.py
34
+ 83276f75aa0972dc7219166e91dd6f2a29aec65e046214f579ef5a3c7aa39193 proxy.py
35
35
  e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 py.typed
36
36
  ee41092f540414ef294c1f74c0fe1f51b9336060dc6e44daee34ef762499b509 server.py
37
37
  ac9ac33522fd872dc42587353c51e3631e2b75dd6f10b0ae6b40b074588737ff streams.py
38
38
  e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 sync/__init__.py
39
- 5b20fde3794aee3e0d40b23b3eaa3158411d77d98c2098e96b4344c71d3c3e3e sync/client.py
40
- 019a800cd64e13779c4e2a93ed636ad67b146eea23683169ccd89c10df702054 sync/connection.py
39
+ 0265d98a4c558359b7f727e5d4ebe6f4a637c5a4dfcd7797350dfacaf60c1ea4 sync/client.py
40
+ dd9c4c859f4fcc8ccaccd168f02efc24b2567e39e1d10ccf78c93a87f94fe044 sync/connection.py
41
41
  abc2b5bf176ba959356ef9f7cd6d49c74f5395a908592c9870e1c2eee7854269 sync/messages.py
42
42
  c0e180bc66cac17caa98d1050425993f77da1efcbfd8c28deced977842fc9c62 sync/router.py
43
- 5534fa4ec47e27e352596e657bc51531334d14dccfa7ac1b656b9541487e8d89 sync/server.py
43
+ a316c9f5bb35f1264e636b9256b4e176d2cef06386c88279838c8541cabe5858 sync/server.py
44
44
  4ed5be9dc605bc99a2496da03bcea7804d8156c9e705d2fee07f3c91634361b8 sync/utils.py
45
45
  e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 trio/__init__.py
46
- 9b637921a141acf61c52da755423d4a3cb49d94162d9f4381bef793382423b15 trio/client.py
46
+ 951e2e225679024d6027c09b720f371b7a773db90ed3400c2500ae9f9d8505b6 trio/client.py
47
47
  d571c39156caddefccf75a4e186798793d286b350ce4d8ea1cea30d0590dae06 trio/connection.py
48
48
  4a66c0d64fe58c41ae10764d2741cf0def3ea231ed313897191db41eb3c9b8a9 trio/messages.py
49
49
  a992fdfb8e268bd48e393194dc22c13ee68237369f406a99f9f265f61569bfeb trio/router.py
50
- 8d1b6b7d97f7847a75690a3a7df34c37bb22696cef65586a0b58aad7f3e3d2c0 trio/server.py
50
+ 0275d2a1425c780c854caa937060db6a3ac406ddaf9033289305af5925d4bb7f trio/server.py
51
51
  035d8d6143ce8d06a21aeb1a938de85b33c8702c618a429390024b5ed649bdc6 trio/utils.py
52
52
  72ef3d9ff5d05e7a3f83da8fa459a12db6f39c4f8c2956b3500a30b36bb926a5 typing.py
53
- d9f14cc3e01b289e47547342bb0d51c7532790290d591a688315a184cdf4114e uri.py
53
+ 4cd1600ef343a207c44b0fbbf17f140e487da49174dda7be76e8eda7113c04eb uri.py
54
54
  59db6c876a908872eb5d40449e9dcb6ad30b253663076084adb78e16fadd5ef1 utils.py
55
- fa82d6b7f153a88ea409283331194af48235ef365eece9cbc359d6d99bea5c4b version.py
55
+ 15757e2221681ad967e40fe2e5a612a46bdb4c11a25948114aca2ba4dbfcde1a version.py
@@ -1,2 +1,2 @@
1
- websockets==17.1
1
+ websockets==17.2
2
2
  Vendored by scripts/vendor_websockets.py — do not edit by hand.
@@ -574,7 +574,7 @@ class connect:
574
574
  if hasattr(self, "connection"):
575
575
  raise RuntimeError("connect() isn't reentrant")
576
576
  self.connection = await self
577
- return self.connection
577
+ return await self.connection.__aenter__()
578
578
 
579
579
  async def __aexit__(
580
580
  self,
@@ -583,7 +583,7 @@ class connect:
583
583
  traceback: TracebackType | None,
584
584
  ) -> None:
585
585
  try:
586
- await self.connection.close()
586
+ return await self.connection.__aexit__(exc_type, exc_value, traceback)
587
587
  finally:
588
588
  del self.connection
589
589
 
@@ -734,6 +734,8 @@ class HTTPProxyConnection(asyncio.Protocol):
734
734
  self.response: asyncio.Future[Response] = loop.create_future()
735
735
 
736
736
  def run_parser(self) -> None:
737
+ if self.response.done():
738
+ return
737
739
  try:
738
740
  next(self.parser)
739
741
  except StopIteration as exc:
@@ -552,16 +552,31 @@ def serve(
552
552
  await stop.wait()
553
553
 
554
554
  Alternatively, await it and call :meth:`~Server.serve_forever` to serve
555
- requests, then cancel it or call :meth:`~Server.close` to stop the server::
555
+ requests, then cancel it to stop the server::
556
556
 
557
557
  server = await serve(handler, host, port)
558
558
  await server.serve_forever()
559
559
 
560
- The following pattern is functional but redundant: by the time the context
560
+ Combining these two patterns works, but is unnecessary: when the context
561
561
  manager exits, :meth:`~Server.serve_forever` has already closed the server::
562
562
 
563
- async with serve(handler, host, port) as server:
564
- await server.serve_forever()
563
+ async with serve(handler, host, port) as server: # don't do this!
564
+ await server.serve_forever() # it's redundant
565
+
566
+ You can also stop the server gracefully by calling its
567
+ :meth:`~Server.close` method::
568
+
569
+ server = await serve(handler, host, port)
570
+ try:
571
+ await stop.wait()
572
+ finally:
573
+ server.close()
574
+ await server.wait_closed()
575
+
576
+ By default, closing the server closes connections with code 1001 (going
577
+ away). You can keep connections alive and wait for clients to disconnect::
578
+
579
+ server.close(close_connections=False)
565
580
 
566
581
  Args:
567
582
  handler: Connection handler. It receives the WebSocket connection,
@@ -668,8 +683,7 @@ def serve(
668
683
  if kwargs.pop("unix", False):
669
684
  return await loop.create_unix_server(protocol_factory, **kwargs)
670
685
  else:
671
- # mypy cannot tell that kwargs must provide sock when port is None.
672
- return await loop.create_server(protocol_factory, host, port, **kwargs) # type: ignore[arg-type]
686
+ return await loop.create_server(protocol_factory, host, port, **kwargs)
673
687
 
674
688
  def protocol_factory() -> ServerConnection:
675
689
  """
@@ -744,12 +758,10 @@ def serve(
744
758
  server.all_connections.add(connection)
745
759
  connection.start_keepalive()
746
760
  try:
747
- await handler(connection)
761
+ async with connection:
762
+ await handler(connection)
748
763
  except Exception:
749
764
  connection.logger.error("connection handler failed", exc_info=True)
750
- await connection.close(CloseCode.INTERNAL_ERROR)
751
- else:
752
- await connection.close()
753
765
  finally:
754
766
  server.all_connections.discard(connection)
755
767
 
@@ -56,7 +56,10 @@ class PerMessageDeflate(Extension):
56
56
  assert remote_no_context_takeover in [False, True]
57
57
  assert local_no_context_takeover in [False, True]
58
58
  assert 8 <= remote_max_window_bits <= 15
59
- assert 8 <= local_max_window_bits <= 15
59
+ # Due to https://github.com/madler/zlib/issues/171, zlib.compressobj
60
+ # rejects wbits=-8 with ValueError: Invalid initialization option.
61
+ # This makes it impossible to support local_max_window_bits = 8.
62
+ assert 9 <= local_max_window_bits <= 15
60
63
  assert "wbits" not in compress_settings
61
64
 
62
65
  self.remote_no_context_takeover = remote_no_context_takeover
@@ -314,11 +317,13 @@ class ClientPerMessageDeflateFactory(ClientExtensionFactory):
314
317
  server_max_window_bits: Maximum size of the server's LZ77 sliding window
315
318
  in bits, between 8 and 15.
316
319
  client_max_window_bits: Maximum size of the client's LZ77 sliding window
317
- in bits, between 8 and 15, or :obj:`True` to indicate support without
318
- setting a limit.
320
+ in bits, between 9 and 15, or :obj:`True` to indicate support without
321
+ setting a limit. 8 isn't supported due to a `limitation of zlib`_.
319
322
  compress_settings: Additional keyword arguments for :func:`zlib.compressobj`,
320
323
  excluding ``wbits``.
321
324
 
325
+ .. _limitation of zlib: https://github.com/madler/zlib/issues/171
326
+
322
327
  """
323
328
 
324
329
  name = ExtensionName("permessage-deflate")
@@ -340,9 +345,9 @@ class ClientPerMessageDeflateFactory(ClientExtensionFactory):
340
345
  if not (
341
346
  client_max_window_bits is None
342
347
  or client_max_window_bits is True
343
- or 8 <= client_max_window_bits <= 15
348
+ or 9 <= client_max_window_bits <= 15
344
349
  ):
345
- raise ValueError("client_max_window_bits must be between 8 and 15")
350
+ raise ValueError("client_max_window_bits must be between 9 and 15")
346
351
  if compress_settings is not None and "wbits" in compress_settings:
347
352
  raise ValueError(
348
353
  "compress_settings must not include wbits, "
@@ -464,6 +469,9 @@ class ClientPerMessageDeflateFactory(ClientExtensionFactory):
464
469
  elif client_max_window_bits > self.client_max_window_bits:
465
470
  raise NegotiationError("unsupported client_max_window_bits")
466
471
 
472
+ if client_max_window_bits == 8:
473
+ raise NegotiationError("unsupported client_max_window_bits = 8, use 9")
474
+
467
475
  return PerMessageDeflate(
468
476
  server_no_context_takeover, # remote_no_context_takeover
469
477
  client_no_context_takeover, # local_no_context_takeover
@@ -512,7 +520,8 @@ class ServerPerMessageDeflateFactory(ServerExtensionFactory):
512
520
  server_no_context_takeover: Prevent server from using context takeover.
513
521
  client_no_context_takeover: Prevent client from using context takeover.
514
522
  server_max_window_bits: Maximum size of the server's LZ77 sliding window
515
- in bits, between 8 and 15.
523
+ in bits, between 9 and 15. 8 isn't supported due to a `limitation of
524
+ zlib`_.
516
525
  client_max_window_bits: Maximum size of the client's LZ77 sliding window
517
526
  in bits, between 8 and 15.
518
527
  compress_settings: Additional keyword arguments for :func:`zlib.compressobj`,
@@ -522,6 +531,8 @@ class ServerPerMessageDeflateFactory(ServerExtensionFactory):
522
531
  the default behavior is to enable compression without enforcing
523
532
  ``client_max_window_bits``.
524
533
 
534
+ .. _limitation of zlib: https://github.com/madler/zlib/issues/171
535
+
525
536
  """
526
537
 
527
538
  name = ExtensionName("permessage-deflate")
@@ -539,8 +550,8 @@ class ServerPerMessageDeflateFactory(ServerExtensionFactory):
539
550
  Configure the Per-Message Deflate extension factory.
540
551
 
541
552
  """
542
- if not (server_max_window_bits is None or 8 <= server_max_window_bits <= 15):
543
- raise ValueError("server_max_window_bits must be between 8 and 15")
553
+ if not (server_max_window_bits is None or 9 <= server_max_window_bits <= 15):
554
+ raise ValueError("server_max_window_bits must be between 9 and 15")
544
555
  if not (client_max_window_bits is None or 8 <= client_max_window_bits <= 15):
545
556
  raise ValueError("client_max_window_bits must be between 8 and 15")
546
557
  if compress_settings is not None and "wbits" in compress_settings:
@@ -633,6 +644,9 @@ class ServerPerMessageDeflateFactory(ServerExtensionFactory):
633
644
  elif server_max_window_bits > self.server_max_window_bits:
634
645
  server_max_window_bits = self.server_max_window_bits
635
646
 
647
+ if server_max_window_bits == 8:
648
+ raise NegotiationError("unsupported server_max_window_bits = 8, use 9")
649
+
636
650
  # client_max_window_bits
637
651
 
638
652
  # Config Req. Resp.
@@ -4,6 +4,7 @@ import dataclasses
4
4
  import enum
5
5
  import io
6
6
  import os
7
+ import re
7
8
  import secrets
8
9
  import struct
9
10
  from collections.abc import Generator, Sequence
@@ -26,6 +27,8 @@ __all__ = [
26
27
  "Close",
27
28
  ]
28
29
 
30
+ is_space_or_printable_ascii = re.compile(rb"[\x09-\x0D\x20-\x7E]*").fullmatch
31
+
29
32
 
30
33
  class Opcode(enum.IntEnum):
31
34
  """Opcode values for WebSocket frames."""
@@ -150,10 +153,8 @@ class Frame:
150
153
  conveniently. Instead, it shows the beginning and the end. It's robust
151
154
  to incorrect data.
152
155
 
153
- It attempts to decode UTF-8 payloads whenever possible, even for binary
154
- frames and control frames, because those frequently contain UTF-8 data.
155
- It applies the same logic to continuation frames, because we don't know
156
- if they continue a text frame or a binary frame.
156
+ It attempts to decode UTF-8 in data frames, even in binary frames,
157
+ because those frequently contain UTF-8 data.
157
158
 
158
159
  """
159
160
  expect_text = self.DEFAULT_IS_TEXT.get(self.opcode)
@@ -177,58 +178,76 @@ class Frame:
177
178
  This is a helper for the __str__ method.
178
179
 
179
180
  """
181
+ data_repr: str = ""
182
+ is_text: bool | None = None
183
+
180
184
  if not self.data:
181
185
  return "''", self.DEFAULT_IS_TEXT.get(self.opcode)
182
186
 
183
- # Special case for close frames: parse close code and reason.
184
- # Fall back to the standard case if the payload is malformed.
187
+ # Close frames: parse close code and reason and display them as text.
188
+ # Fall back to binary when the payload is malformed.
185
189
 
186
190
  if self.opcode is CLOSE:
187
191
  try:
188
- return str(Close.parse(self.data)), True
192
+ data_repr = str(Close.parse(self.data))
193
+ is_text = True
189
194
  except (ProtocolError, UnicodeDecodeError):
190
- pass
191
-
192
- # Guess whether the payload is UTF-8 or binary, regardless of opcode, to
193
- # display UTF-8 text in binary frames nicely and generally to be helpful
194
- # and robust. Also support frames fragmented within UTF-8 sequences.
195
-
196
- if len(self.data) > 4 * self.MAX_LOG_SIZE:
197
- # Process only the start and the end, as the middle will be elided.
198
- # Cast to bytes because self.data could be a memoryview.
199
- data_start = bytes(self.data[: 8 * self.MAX_LOG_SIZE // 3])
200
- data_end = bytes(self.data[-4 * self.MAX_LOG_SIZE // 3 :])
201
- is_text = is_utf8_fragment(
202
- data_start,
203
- must_start_clean=self.opcode != CONT,
204
- ) and is_utf8_fragment(
205
- data_end,
206
- must_end_clean=self.fin,
207
- )
208
- if is_text:
209
- data_repr = repr((data_start + data_end).decode(errors="replace"))
195
+ data_repr = " ".join(f"{byte:02x}" for byte in self.data)
196
+ is_text = False
197
+
198
+ # Control frames: display printable ASCII payloads as text, else binary.
199
+ # We could decode UTF-8 payloads, but this causes confusion when random
200
+ # 4-bytes binary payloads are accidentally valid UTF-8 sequences.
201
+
202
+ elif self.opcode in CTRL_OPCODES:
203
+ if is_space_or_printable_ascii(self.data):
204
+ data_repr = repr(bytes(self.data).decode("ascii"))
205
+ is_text = True
206
+ else:
207
+ data_repr = " ".join(f"{byte:02x}" for byte in self.data)
208
+ is_text = False
209
+
210
+ # Data frames: check whether the payload is UTF-8, regardless of opcode,
211
+ # in order to display nicely UTF-8 text in binary frames, and be robust.
212
+ # Also support frames fragmented within UTF-8 sequences.
210
213
 
211
214
  else:
212
- # Cast to bytes because self.data could be a memoryview.
213
- data = bytes(self.data)
214
- is_text = is_utf8_fragment(
215
- data,
216
- must_start_clean=self.opcode != CONT,
217
- must_end_clean=self.fin,
218
- )
219
- if is_text:
220
- data_repr = repr(data.decode(errors="replace"))
221
-
222
- # When the payload is text (except perhaps for boundaries), we decoded
223
- # enough in ``data_repr``. Now, do the same when the payload is binary.
224
-
225
- if not is_text:
226
- binary = self.data
227
- if len(binary) > self.MAX_LOG_SIZE // 3:
228
- cut = (self.MAX_LOG_SIZE // 3 - 1) // 3 # by default cut = 8
229
- # Encode two dummy bytes to force eliding and adding an ellipsis.
230
- binary = b"".join([binary[: 2 * cut], b"\x00\x00", binary[-cut:]])
231
- data_repr = " ".join(f"{byte:02x}" for byte in binary)
215
+ if len(self.data) > 4 * self.MAX_LOG_SIZE:
216
+ # Process only the start and end, as the middle will be elided.
217
+ # Cast to bytes because self.data could be a memoryview.
218
+ data_start = bytes(self.data[: 8 * self.MAX_LOG_SIZE // 3])
219
+ data_end = bytes(self.data[-4 * self.MAX_LOG_SIZE // 3 :])
220
+ is_text = is_utf8_fragment(
221
+ data_start,
222
+ must_start_clean=self.opcode != CONT,
223
+ ) and is_utf8_fragment(
224
+ data_end,
225
+ must_end_clean=self.fin,
226
+ )
227
+ if is_text:
228
+ data_repr = repr((data_start + data_end).decode(errors="replace"))
229
+
230
+ else:
231
+ # Cast to bytes because self.data could be a memoryview.
232
+ data = bytes(self.data)
233
+ is_text = is_utf8_fragment(
234
+ data,
235
+ must_start_clean=self.opcode != CONT,
236
+ must_end_clean=self.fin,
237
+ )
238
+ if is_text:
239
+ data_repr = repr(data.decode(errors="replace"))
240
+
241
+ # When the payload is text (except perhaps for boundaries), we have
242
+ # enough in ``data_repr``. Do the same when the payload is binary.
243
+
244
+ if not is_text:
245
+ binary = self.data
246
+ if len(binary) > self.MAX_LOG_SIZE // 3:
247
+ cut = (self.MAX_LOG_SIZE // 3 - 1) // 3 # by default cut = 8
248
+ # Encode two dummy bytes to force eliding and adding an ellipsis.
249
+ binary = b"".join([binary[: 2 * cut], b"\x00\x00", binary[-cut:]])
250
+ data_repr = " ".join(f"{byte:02x}" for byte in binary)
232
251
 
233
252
  # Elide the middle of the representation to fit the maximum log size.
234
253
 
@@ -175,7 +175,9 @@ async def read_headers(stream: asyncio.StreamReader) -> Headers:
175
175
 
176
176
  name = raw_name.decode("ascii") # guaranteed to be ASCII at this point
177
177
  value = raw_value.decode("ascii", "surrogateescape")
178
- headers[name] = value
178
+
179
+ # Since we just validated raw_value, we don't need to revalidate it.
180
+ headers.set_insecure(name, value)
179
181
 
180
182
  else:
181
183
  raise SecurityError("too many HTTP headers")
@@ -8,7 +8,7 @@ from .datastructures import Headers
8
8
  from .exceptions import InvalidProxy
9
9
  from .headers import build_authorization_basic, build_host
10
10
  from .http11 import USER_AGENT
11
- from .uri import DELIMS, WebSocketURI
11
+ from .uri import WebSocketURI
12
12
 
13
13
 
14
14
  __all__ = ["get_proxy", "parse_proxy", "Proxy"]
@@ -78,8 +78,11 @@ def parse_proxy(proxy: str) -> Proxy:
78
78
  password = parsed.password
79
79
  # urllib.parse.urlparse accepts URLs with a username but without a
80
80
  # password. This doesn't make sense for HTTP Basic Auth credentials.
81
- if username is not None and password is None:
82
- raise InvalidProxy(proxy, "username provided without password")
81
+ if username is not None:
82
+ if password is None:
83
+ raise InvalidProxy(proxy, "username provided without password")
84
+ username = urllib.parse.unquote(username, errors="strict")
85
+ password = urllib.parse.unquote(password, errors="strict")
83
86
 
84
87
  try:
85
88
  proxy.encode("ascii")
@@ -87,10 +90,6 @@ def parse_proxy(proxy: str) -> Proxy:
87
90
  # Input contains non-ASCII characters.
88
91
  # It must be an IRI. Convert it to a URI.
89
92
  host = host.encode("idna").decode()
90
- if username is not None:
91
- assert password is not None
92
- username = urllib.parse.quote(username, safe=DELIMS)
93
- password = urllib.parse.quote(password, safe=DELIMS)
94
93
 
95
94
  return Proxy(scheme, host, port, username, password)
96
95
 
@@ -521,7 +521,7 @@ class reconnect:
521
521
  raise RuntimeError("connect() isn't reentrant")
522
522
  self.connection = self.connect()
523
523
  self.connection.pending_legacy_warning = False
524
- return self.connection
524
+ return self.connection.__enter__()
525
525
 
526
526
  def __exit__(
527
527
  self,
@@ -530,7 +530,7 @@ class reconnect:
530
530
  exc_traceback: TracebackType | None,
531
531
  ) -> None:
532
532
  try:
533
- self.connection.close()
533
+ return self.connection.__exit__(exc_type, exc_value, exc_traceback)
534
534
  finally:
535
535
  del self.connection
536
536
 
@@ -612,6 +612,26 @@ class Connection:
612
612
  # They mean that the connection is closed, which was the goal.
613
613
  pass
614
614
 
615
+ def wait_closed(self, timeout: float | None = None) -> bool:
616
+ """
617
+ Wait until the connection is closed.
618
+
619
+ :meth:`wait_closed` waits for the closing handshake to complete and for
620
+ the TCP connection to terminate.
621
+
622
+ If a timeout is provided and elapses before the connection is closed,
623
+ :meth:`wait_closed` returns :obj:`False`. Else, it returns :obj:`True`.
624
+
625
+ Args:
626
+ timeout: Optional timeout in seconds.
627
+
628
+ Returns:
629
+ Whether the connection is closed.
630
+
631
+ """
632
+ self.recv_events_thread.join(timeout)
633
+ return not self.recv_events_thread.is_alive()
634
+
615
635
  def ping(
616
636
  self,
617
637
  data: DataLike | None = None,
@@ -314,16 +314,20 @@ class Server:
314
314
 
315
315
  try:
316
316
  try:
317
+ # Capture the socket name to prevent a race condition in case
318
+ # the socket is closed between registering it with the poller
319
+ # and logging the "server listening on ..." message.
320
+ socket_name = get_socket_name(self.socket)
317
321
  poller.register(self.socket, selectors.EVENT_READ)
318
322
  except (OSError, ValueError): # pragma: no cover
319
- # shutdown() was called before poller.register().
323
+ # shutdown() ran before get_socket_name() or poller.register().
320
324
  # This may result in:
321
325
  # * OSError: [Errno 9] Bad file descriptor
322
- # (only observed on free-threaded Python)
326
+ # (only seen on free-threaded Python for poller.register())
323
327
  # * ValueError: Invalid file descriptor: -1
324
328
  return
325
329
 
326
- self.logger.info("server listening on %s", get_socket_name(self.socket))
330
+ self.logger.info("server listening on %s", socket_name)
327
331
 
328
332
  while True:
329
333
  poller.select()
@@ -540,8 +544,15 @@ def serve(
540
544
  with serve(handler, ...) as server:
541
545
  server.serve_forever()
542
546
 
543
- To stop the server gracefully, call its :meth:`~Server.shutdown` method
544
- from another thread.
547
+ You can stop the server gracefully by calling its :meth:`~Server.shutdown`
548
+ method from another thread::
549
+
550
+ server.shutdown()
551
+
552
+ By default, closing the server closes connections with code 1001 (going
553
+ away). You can keep connections alive and wait for clients to disconnect::
554
+
555
+ server.shutdown(close_connections=False)
545
556
 
546
557
  Args:
547
558
  handler: Connection handler. It receives the WebSocket connection,
@@ -766,12 +777,10 @@ def serve(
766
777
  server.all_connections.add(connection)
767
778
  connection.start_keepalive()
768
779
  try:
769
- handler(connection)
780
+ with connection:
781
+ handler(connection)
770
782
  except Exception:
771
783
  connection.logger.error("connection handler failed", exc_info=True)
772
- connection.close(CloseCode.INTERNAL_ERROR)
773
- else:
774
- connection.close()
775
784
  finally:
776
785
  with server.lock:
777
786
  server.all_connections.discard(connection)
@@ -549,7 +549,7 @@ class connect:
549
549
  await self.__aenter_nursery__()
550
550
  try:
551
551
  self.connection = await self.connect(self.nursery)
552
- return self.connection
552
+ return await self.connection.__aenter__()
553
553
  except BaseException as exc:
554
554
  await self.__aexit_nursery__(type(exc), exc, exc.__traceback__)
555
555
  raise AssertionError("expected __aexit_nursery__ to re-raise the exception")
@@ -562,7 +562,7 @@ class connect:
562
562
  ) -> None:
563
563
  try:
564
564
  try:
565
- await self.connection.aclose()
565
+ return await self.connection.__aexit__(exc_type, exc_value, traceback)
566
566
  finally:
567
567
  del self.connection
568
568
  finally:
@@ -439,7 +439,7 @@ async def serve(
439
439
  async with server:
440
440
  await stop.wait()
441
441
 
442
- Alternatively, to stop the server gracefully, call its
442
+ Alternatively, you can stop the server gracefully by calling its
443
443
  :meth:`~Server.aclose` method::
444
444
 
445
445
  with trio.open_nursery() as nursery:
@@ -449,6 +449,11 @@ async def serve(
449
449
  finally:
450
450
  await server.aclose()
451
451
 
452
+ By default, closing the server closes connections with code 1001 (going
453
+ away). You can keep connections alive and wait for clients to disconnect::
454
+
455
+ await server.aclose(close_connections=False)
456
+
452
457
  Args:
453
458
  handler: Connection handler. It receives the WebSocket connection,
454
459
  which is a :class:`ServerConnection`, in argument.
@@ -639,12 +644,10 @@ async def serve(
639
644
  server.all_connections.add(connection)
640
645
  connection.start_keepalive()
641
646
  try:
642
- await handler(connection)
647
+ async with connection:
648
+ await handler(connection)
643
649
  except Exception:
644
650
  connection.logger.error("connection handler failed", exc_info=True)
645
- await connection.aclose(CloseCode.INTERNAL_ERROR)
646
- else:
647
- await connection.aclose()
648
651
  finally:
649
652
  server.all_connections.discard(connection)
650
653