ha-mcp-dev 9.0.0.dev3100__tar.gz → 9.0.0.dev3105__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.dev3100 → ha_mcp_dev-9.0.0.dev3105}/PKG-INFO +1 -1
  2. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/pyproject.toml +2 -1
  3. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/pyproject.toml.orig +2 -1
  4. ha_mcp_dev-9.0.0.dev3105/src/ha_mcp/client/models.py +18 -0
  5. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/client/rest_client.py +25 -27
  6. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/component_api.py +64 -0
  7. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/log_common.py +18 -7
  8. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/log_sources.py +6 -235
  9. ha_mcp_dev-9.0.0.dev3105/src/ha_mcp/tools/log_sources_logbook.py +622 -0
  10. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/log_sources_supervisor.py +46 -13
  11. ha_mcp_dev-9.0.0.dev3105/src/ha_mcp/tools/server_version.py +77 -0
  12. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/tools_bug_report.py +32 -50
  13. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/tools_dev.py +4 -5
  14. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/tools_logs.py +55 -4
  15. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/LICENSE +0 -0
  16. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/README.md +0 -0
  17. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/__init__.py +0 -0
  18. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/__main__.py +0 -0
  19. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_pypi_marker +0 -0
  20. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_rich_compat.py +0 -0
  21. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/__init__.py +0 -0
  22. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
  23. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
  24. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
  25. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
  26. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
  27. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
  28. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
  29. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
  30. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
  31. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
  32. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
  33. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
  34. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
  35. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
  36. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
  37. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
  38. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
  39. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
  40. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
  41. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev_security.py +0 -0
  42. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
  43. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
  44. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
  45. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
  46. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
  47. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
  48. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
  49. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
  50. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
  51. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
  52. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
  53. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
  54. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
  55. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
  56. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
  57. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
  58. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
  59. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
  60. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
  61. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
  62. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
  63. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
  64. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
  65. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
  66. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
  67. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
  68. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
  69. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
  70. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
  71. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
  72. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
  73. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
  74. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
  75. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
  76. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
  77. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
  78. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
  79. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
  80. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
  81. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
  82. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
  83. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
  84. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
  85. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
  86. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
  87. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
  88. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
  89. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
  90. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
  91. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
  92. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
  93. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
  94. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
  95. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
  96. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
  97. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
  98. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
  99. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
  100. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
  101. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
  102. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
  103. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
  104. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
  105. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
  106. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
  107. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
  108. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
  109. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
  110. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
  111. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
  112. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
  113. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
  114. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
  115. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
  116. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
  117. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
  118. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
  119. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
  120. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/jev_search.py +0 -0
  121. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
  122. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
  123. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
  124. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
  125. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
  126. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
  127. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
  128. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
  129. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
  130. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
  131. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
  132. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
  133. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
  134. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
  135. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
  136. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
  137. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
  138. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
  139. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
  140. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
  141. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
  142. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
  143. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
  144. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
  145. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
  146. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
  147. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
  148. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
  149. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
  150. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
  151. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
  152. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
  153. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
  154. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
  155. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
  156. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
  157. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
  158. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
  159. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
  160. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
  161. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
  162. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
  163. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
  164. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
  165. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
  166. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
  167. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
  168. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
  169. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
  170. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
  171. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
  172. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
  173. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
  174. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
  175. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
  176. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
  177. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
  178. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
  179. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
  180. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
  181. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
  182. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
  183. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
  184. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
  185. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
  186. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
  187. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
  188. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
  189. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
  190. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
  191. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
  192. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
  193. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/mixins/extensions.py +0 -0
  194. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
  195. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
  196. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
  197. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
  198. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
  199. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
  200. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
  201. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
  202. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
  203. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
  204. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
  205. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
  206. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
  207. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
  208. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
  209. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
  210. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
  211. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
  212. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
  213. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
  214. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
  215. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
  216. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
  217. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
  218. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
  219. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
  220. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
  221. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
  222. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
  223. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
  224. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
  225. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
  226. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
  227. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
  228. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
  229. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
  230. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
  231. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
  232. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
  233. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
  234. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
  235. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
  236. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
  237. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
  238. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
  239. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
  240. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
  241. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
  242. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
  243. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
  244. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
  245. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
  246. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
  247. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
  248. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
  249. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
  250. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
  251. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
  252. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
  253. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
  254. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
  255. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
  256. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
  257. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
  258. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
  259. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
  260. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
  261. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
  262. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
  263. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
  264. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
  265. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
  266. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
  267. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
  268. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
  269. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
  270. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
  271. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
  272. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
  273. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
  274. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
  275. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
  276. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
  277. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
  278. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
  279. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
  280. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
  281. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
  282. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
  283. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
  284. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
  285. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
  286. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
  287. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
  288. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
  289. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
  290. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
  291. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
  292. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
  293. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
  294. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
  295. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
  296. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
  297. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
  298. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
  299. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
  300. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
  301. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
  302. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
  303. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
  304. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
  305. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
  306. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
  307. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
  308. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
  309. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
  310. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
  311. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
  312. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
  313. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
  314. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
  315. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
  316. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
  317. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
  318. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
  319. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
  320. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
  321. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
  322. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
  323. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
  324. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
  325. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
  326. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
  327. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
  328. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
  329. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
  330. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
  331. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
  332. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
  333. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
  334. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
  335. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
  336. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
  337. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
  338. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
  339. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
  340. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
  341. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
  342. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
  343. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
  344. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
  345. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
  346. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
  347. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
  348. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
  349. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
  350. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
  351. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
  352. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
  353. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
  354. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
  355. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
  356. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
  357. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
  358. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
  359. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
  360. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
  361. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
  362. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
  363. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
  364. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
  365. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
  366. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
  367. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
  368. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
  369. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
  370. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
  371. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
  372. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
  373. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
  374. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
  375. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
  376. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
  377. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
  378. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
  379. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
  380. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
  381. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
  382. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
  383. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
  384. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
  385. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
  386. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
  387. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
  388. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
  389. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
  390. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
  391. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
  392. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
  393. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
  394. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
  395. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
  396. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
  397. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
  398. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
  399. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/shared/_request_clock.py +0 -0
  400. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
  401. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
  402. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
  403. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
  404. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
  405. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
  406. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
  407. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
  408. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
  409. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
  410. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
  411. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
  412. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
  413. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
  414. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
  415. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
  416. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
  417. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
  418. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
  419. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
  420. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
  421. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
  422. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
  423. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
  424. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
  425. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
  426. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
  427. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
  428. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
  429. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
  430. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
  431. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
  432. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
  433. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
  434. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
  435. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
  436. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/requirements.txt +0 -0
  437. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
  438. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
  439. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
  440. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
  441. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
  442. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
  443. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
  444. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
  445. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
  446. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
  447. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
  448. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
  449. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
  450. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/client.py +0 -0
  451. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
  452. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
  453. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
  454. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
  455. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
  456. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
  457. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
  458. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
  459. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
  460. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
  461. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
  462. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
  463. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
  464. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
  465. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
  466. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
  467. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
  468. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
  469. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
  470. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
  471. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
  472. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
  473. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/server.py +0 -0
  474. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
  475. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
  476. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
  477. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
  478. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
  479. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
  480. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
  481. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
  482. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
  483. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
  484. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
  485. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
  486. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
  487. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
  488. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
  489. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
  490. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
  491. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
  492. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_vendor/websockets/version.py +0 -0
  493. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/_version.py +0 -0
  494. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/app_discovery.py +0 -0
  495. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/auth/__init__.py +0 -0
  496. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/auth/consent_form.py +0 -0
  497. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/auth/oidc_compat.py +0 -0
  498. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/auth/provider.py +0 -0
  499. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/backup_dashboards.py +0 -0
  500. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/backup_diff.py +0 -0
  501. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/backup_entity_ids.py +0 -0
  502. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/backup_helper_target.py +0 -0
  503. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/backup_integrations.py +0 -0
  504. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/backup_manager.py +0 -0
  505. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/backup_tags.py +0 -0
  506. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/backup_zones.py +0 -0
  507. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/browser_landing.py +0 -0
  508. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/client/__init__.py +0 -0
  509. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/client/admin_routes.py +0 -0
  510. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/client/supervisor_client.py +0 -0
  511. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/client/websocket_client.py +0 -0
  512. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/client/websocket_listener.py +0 -0
  513. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/config.py +0 -0
  514. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/config_backup.py +0 -0
  515. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/config_meta.py +0 -0
  516. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/config_overrides.py +0 -0
  517. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/config_registry.py +0 -0
  518. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/config_settings.py +0 -0
  519. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
  520. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
  521. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
  522. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
  523. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
  524. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
  525. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/errors.py +0 -0
  526. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/ha_request_queue.py +0 -0
  527. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/hacs_auto_refresh.py +0 -0
  528. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/http_transport.py +0 -0
  529. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/image_info.py +0 -0
  530. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/llm_exposure.py +0 -0
  531. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/log_filters.py +0 -0
  532. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/policy/__init__.py +0 -0
  533. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/policy/approval_queue.py +0 -0
  534. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/policy/decision_pin.py +0 -0
  535. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/policy/decisions.py +0 -0
  536. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/policy/editing.py +0 -0
  537. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/policy/evaluator.py +0 -0
  538. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/policy/events.py +0 -0
  539. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/policy/handlers.py +0 -0
  540. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/policy/middleware.py +0 -0
  541. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/policy/model.py +0 -0
  542. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/policy/mrtr.py +0 -0
  543. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/policy/persistence.py +0 -0
  544. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/policy/server_channels.py +0 -0
  545. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/policy/value_sources.py +0 -0
  546. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/py.typed +0 -0
  547. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/read_only.py +0 -0
  548. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/redaction.py +0 -0
  549. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/renamed_tools.py +0 -0
  550. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  551. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  552. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
  553. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-actions.md +0 -0
  554. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
  555. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
  556. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  557. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  558. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  559. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  560. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  561. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  562. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  563. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
  564. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  565. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/triggers-and-conditions.md +0 -0
  566. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
  567. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/server.py +0 -0
  568. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/server_instructions.py +0 -0
  569. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/server_lifespan.py +0 -0
  570. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/server_tool_text.py +0 -0
  571. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/settings_ui/__init__.py +0 -0
  572. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
  573. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
  574. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
  575. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/settings_ui/_handlers_oauth_callbacks.py +0 -0
  576. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
  577. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
  578. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
  579. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/settings_ui/_i18n.py +0 -0
  580. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
  581. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/settings_ui/_persistence.py +0 -0
  582. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
  583. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/settings_ui/_theme.py +0 -0
  584. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
  585. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/settings_ui/locales/README.md +0 -0
  586. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/settings_ui/locales/az.json +0 -0
  587. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
  588. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/settings_ui/locales/de.json +0 -0
  589. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/settings_ui/locales/en.json +0 -0
  590. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
  591. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/settings_ui/locales/es.json +0 -0
  592. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
  593. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/settings_ui/locales/it.json +0 -0
  594. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
  595. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
  596. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
  597. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
  598. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
  599. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
  600. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
  601. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
  602. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/settings_ui/settings.css +0 -0
  603. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/settings_ui/settings.html +0 -0
  604. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/settings_ui/settings_js/01_i18n_state.js +0 -0
  605. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/settings_ui/settings_js/02_tools_restart.js +0 -0
  606. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/settings_ui/settings_js/03_render_save.js +0 -0
  607. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/settings_ui/settings_js/04_backups.js +0 -0
  608. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/settings_ui/settings_js/05_feature_flags.js +0 -0
  609. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/settings_ui/settings_js/06_policy_cards.js +0 -0
  610. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/settings_ui/settings_js/07_policy_actions.js +0 -0
  611. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/settings_ui/settings_js/08_advanced.js +0 -0
  612. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/settings_ui/settings_js/09_prefs_visibility.js +0 -0
  613. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/settings_ui/settings_js/10_oauth_callbacks.js +0 -0
  614. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/smoke_test.py +0 -0
  615. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  616. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/strict_bps.py +0 -0
  617. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tool_dispatch.py +0 -0
  618. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/__init__.py +0 -0
  619. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/area_messages.py +0 -0
  620. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/auto_backup.py +0 -0
  621. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/backup.py +0 -0
  622. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/backup_access.py +0 -0
  623. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/backup_on_demand.py +0 -0
  624. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  625. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/best_practice_result.py +0 -0
  626. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/best_practice_variables.py +0 -0
  627. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/blueprint_sources.py +0 -0
  628. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
  629. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/blueprint_write.py +0 -0
  630. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/bug_report_config.py +0 -0
  631. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/bug_report_templates.py +0 -0
  632. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/bulk_selector.py +0 -0
  633. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/coercion.py +0 -0
  634. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/component_config_entries.py +0 -0
  635. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/component_config_reads.py +0 -0
  636. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
  637. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/component_devices.py +0 -0
  638. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/component_helper_collections.py +0 -0
  639. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/component_registries.py +0 -0
  640. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
  641. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/config_entry_backup.py +0 -0
  642. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/config_entry_flow.py +0 -0
  643. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
  644. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/config_entry_flow_introspect.py +0 -0
  645. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
  646. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
  647. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/config_entry_identity.py +0 -0
  648. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
  649. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
  650. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/config_helpers/__init__.py +0 -0
  651. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/config_helpers/core_payload.py +0 -0
  652. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/config_helpers/create.py +0 -0
  653. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/config_helpers/describe.py +0 -0
  654. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/config_helpers/flow.py +0 -0
  655. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/config_helpers/icon_route.py +0 -0
  656. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/config_helpers/listing.py +0 -0
  657. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/config_helpers/registry.py +0 -0
  658. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/config_helpers/schemas.py +0 -0
  659. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/config_helpers/typed_config.py +0 -0
  660. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/config_helpers/update.py +0 -0
  661. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/config_helpers/validation.py +0 -0
  662. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/config_subentry_restore.py +0 -0
  663. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/config_write_errors.py +0 -0
  664. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/config_write_helpers.py +0 -0
  665. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/core_contract.py +0 -0
  666. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/dashboard_card_describe.py +0 -0
  667. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
  668. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/dashboard_list_checks.py +0 -0
  669. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/dev_backup.py +0 -0
  670. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/device_control.py +0 -0
  671. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/device_enrichment.py +0 -0
  672. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/diagnostics_helpers.py +0 -0
  673. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/energy_preferences.py +0 -0
  674. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/entity_param_parsing.py +0 -0
  675. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/entity_registration.py +0 -0
  676. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/entity_removal.py +0 -0
  677. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/entity_update_fields.py +0 -0
  678. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/error_log_parsing.py +0 -0
  679. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/flow_helper_lookup.py +0 -0
  680. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/hacs_registration.py +0 -0
  681. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/helper_flows.py +0 -0
  682. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/helpers.py +0 -0
  683. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/history_response.py +0 -0
  684. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/integration_entry_state.py +0 -0
  685. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
  686. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/log_sources_fault.py +0 -0
  687. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/radio/__init__.py +0 -0
  688. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/radio/base.py +0 -0
  689. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/radio/matter.py +0 -0
  690. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/radio/thread.py +0 -0
  691. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/radio/zigbee.py +0 -0
  692. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/radio/zwave.py +0 -0
  693. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/radio/zwave_parameters.py +0 -0
  694. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/recorder_errors.py +0 -0
  695. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/reference_validator.py +0 -0
  696. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/registry.py +0 -0
  697. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
  698. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/response_helpers.py +0 -0
  699. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/scene_discovery.py +0 -0
  700. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/search/__init__.py +0 -0
  701. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/search/base.py +0 -0
  702. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/search/component.py +0 -0
  703. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/search/entities.py +0 -0
  704. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/search/legacy.py +0 -0
  705. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/search/modes.py +0 -0
  706. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/search/overview.py +0 -0
  707. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/search/response.py +0 -0
  708. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/search/state.py +0 -0
  709. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  710. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  711. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  712. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
  713. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  714. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  715. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
  716. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  717. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  718. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  719. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/statistics_calendar.py +0 -0
  720. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/statistics_helpers.py +0 -0
  721. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/statistics_resets.py +0 -0
  722. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/system_restart.py +0 -0
  723. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/tool_hints.py +0 -0
  724. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
  725. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/tools_addons.py +0 -0
  726. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/tools_areas.py +0 -0
  727. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
  728. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  729. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/tools_calendar.py +0 -0
  730. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/tools_camera.py +0 -0
  731. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/tools_categories.py +0 -0
  732. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/tools_code.py +0 -0
  733. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/tools_config_automations.py +0 -0
  734. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
  735. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  736. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
  737. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
  738. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
  739. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/tools_energy.py +0 -0
  740. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/tools_entities.py +0 -0
  741. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  742. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/tools_groups.py +0 -0
  743. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/tools_hacs.py +0 -0
  744. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/tools_history.py +0 -0
  745. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/tools_integrations.py +0 -0
  746. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/tools_labels.py +0 -0
  747. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/tools_radio.py +0 -0
  748. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/tools_registry.py +0 -0
  749. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/tools_resources.py +0 -0
  750. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/tools_search.py +0 -0
  751. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/tools_security_policy.py +0 -0
  752. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/tools_service.py +0 -0
  753. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/tools_services.py +0 -0
  754. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/tools_system.py +0 -0
  755. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/tools_themes.py +0 -0
  756. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/tools_todo.py +0 -0
  757. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/tools_traces.py +0 -0
  758. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/tools_updates.py +0 -0
  759. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/tools_utility.py +0 -0
  760. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  761. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  762. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
  763. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/tools_zones.py +0 -0
  764. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/util_helpers.py +0 -0
  765. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/validation_middleware.py +0 -0
  766. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/tools/ws_waiters.py +0 -0
  767. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/transforms/__init__.py +0 -0
  768. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/transforms/categorized_search.py +0 -0
  769. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/transforms/compact_params.py +0 -0
  770. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/transforms/component_helpers.py +0 -0
  771. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/transforms/component_search.py +0 -0
  772. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  773. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/transforms/write_tool_note.py +0 -0
  774. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/transport_security.py +0 -0
  775. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/update_check.py +0 -0
  776. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/utils/__init__.py +0 -0
  777. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/utils/config_hash.py +0 -0
  778. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/utils/config_write_lock.py +0 -0
  779. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/utils/dashboard_patch.py +0 -0
  780. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/utils/data_paths.py +0 -0
  781. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
  782. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/utils/domain_handlers.py +0 -0
  783. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/utils/entity_membership.py +0 -0
  784. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  785. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  786. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/utils/mcp_client_host.py +0 -0
  787. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/utils/operation_manager.py +0 -0
  788. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/utils/python_sandbox.py +0 -0
  789. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/utils/registry_update_lock.py +0 -0
  790. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/utils/skill_loader.py +0 -0
  791. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/utils/usage_logger.py +0 -0
  792. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/visibility/__init__.py +0 -0
  793. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/visibility/enforcement.py +0 -0
  794. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/visibility/model.py +0 -0
  795. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/src/ha_mcp/visibility/persistence.py +0 -0
  796. {ha_mcp_dev-9.0.0.dev3100 → ha_mcp_dev-9.0.0.dev3105}/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.dev3100
3
+ Version: 9.0.0.dev3105
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.dev3100"
7
+ version = "9.0.0.dev3105"
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"
@@ -253,6 +253,7 @@ markers = [
253
253
  "not_on_haos_embedded: skip on the haos_embedded backend (HAOS_TEST_MODE=embedded) - provably redundant with the lane's own session backend, which enables the entry once and drives the in-process server for the whole suite; #1527",
254
254
  "requires_tools_entry: needs the File & YAML Tools config entry - skipped on E2E_NO_TOOLS_ENTRY=1 lanes (#2292)",
255
255
  "no_tools_only: runs only on E2E_NO_TOOLS_ENTRY=1 lanes (#2292)",
256
+ "requires_component_surface: needs an active ha_mcp_tools config entry - skipped on the no-tools lanes without an active server entry (plain container, HAOS inaddon, where it is absent or disabled); #2584",
256
257
  ]
257
258
  asyncio_mode = "auto"
258
259
  asyncio_default_fixture_loop_scope = "session"
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "9.0.0.dev3100"
7
+ version = "9.0.0.dev3105"
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
@@ -328,6 +328,7 @@ markers = [
328
328
  "not_on_haos_embedded: skip on the haos_embedded backend (HAOS_TEST_MODE=embedded) - provably redundant with the lane's own session backend, which enables the entry once and drives the in-process server for the whole suite; #1527",
329
329
  "requires_tools_entry: needs the File & YAML Tools config entry - skipped on E2E_NO_TOOLS_ENTRY=1 lanes (#2292)",
330
330
  "no_tools_only: runs only on E2E_NO_TOOLS_ENTRY=1 lanes (#2292)",
331
+ "requires_component_surface: needs an active ha_mcp_tools config entry - skipped on the no-tools lanes without an active server entry (plain container, HAOS inaddon, where it is absent or disabled); #2584",
331
332
  ]
332
333
 
333
334
  # Async support - session-scoped loop lets session-scoped fixtures
@@ -0,0 +1,18 @@
1
+ """Frozen value types shared by the client and its tool consumers."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from dataclasses import dataclass
6
+
7
+
8
+ @dataclass(frozen=True)
9
+ class ErrorLogPage:
10
+ """One bounded window of the error log, plus whether older history exists.
11
+
12
+ ``has_more`` cannot be derived by the caller from ``text``: a journald
13
+ window that comes back full may or may not have anything behind it (see
14
+ ``_journald_error_log_page``), and only the fetching route knows which.
15
+ """
16
+
17
+ text: str
18
+ has_more: bool
@@ -18,6 +18,7 @@ from .._vendor.websockets.exceptions import WebSocketException
18
18
  from .._version import get_supervisor_base_url, is_running_in_addon
19
19
  from ..config import get_global_settings
20
20
  from .admin_routes import is_admin_only_route
21
+ from .models import ErrorLogPage
21
22
  from .supervisor_client import make_supervisor_httpx_client
22
23
 
23
24
 
@@ -147,19 +148,6 @@ class HomeAssistantAPIError(HomeAssistantError):
147
148
  self.response_data = response_data
148
149
 
149
150
 
150
- @dataclass(frozen=True)
151
- class ErrorLogPage:
152
- """One bounded window of the error log, plus whether older history exists.
153
-
154
- ``has_more`` cannot be derived by the caller from ``text``: a journald
155
- window that comes back full may or may not have anything behind it (see
156
- ``_journald_error_log_page``), and only the fetching route knows which.
157
- """
158
-
159
- text: str
160
- has_more: bool
161
-
162
-
163
151
  @dataclass(frozen=True)
164
152
  class SceneResolution:
165
153
  """Outcome of resolving a scene identifier via the entity registry.
@@ -831,6 +819,7 @@ class HomeAssistantClient:
831
819
  entity_id: str | None = None,
832
820
  start_time: str | None = None,
833
821
  end_time: str | None = None,
822
+ context_id: str | None = None,
834
823
  ) -> list[dict[str, Any]]:
835
824
  """
836
825
  Get logbook entries.
@@ -839,12 +828,13 @@ class HomeAssistantClient:
839
828
  entity_id: Optional entity ID to filter
840
829
  start_time: Optional start time (ISO format) - used as URL path component
841
830
  end_time: Optional end time (ISO format) - used as query parameter
831
+ context_id: Optional context ID filter - used as query parameter
842
832
 
843
833
  Returns:
844
834
  Logbook entries
845
835
  """
846
836
  logger.debug(
847
- f"Fetching logbook entries for entity: {entity_id}, start: {start_time}, end: {end_time}"
837
+ f"Fetching logbook entries for entity: {entity_id}, start: {start_time}, end: {end_time}, context: {context_id}"
848
838
  )
849
839
 
850
840
  # Build endpoint - start_time goes in URL path if provided
@@ -859,6 +849,8 @@ class HomeAssistantClient:
859
849
  params["entity"] = entity_id
860
850
  if end_time:
861
851
  params["end_time"] = end_time
852
+ if context_id:
853
+ params["context_id"] = context_id
862
854
 
863
855
  result = await self._request("GET", endpoint, params=params)
864
856
  if isinstance(result, list):
@@ -958,6 +950,7 @@ class HomeAssistantClient:
958
950
  "Accept": "text/plain",
959
951
  "Range": self._journald_range_header(lines, offset),
960
952
  },
953
+ params={"no_colors": "true"},
961
954
  )
962
955
  return response.text
963
956
 
@@ -1235,7 +1228,10 @@ class HomeAssistantClient:
1235
1228
  "GET",
1236
1229
  f"/hassio/{path}/logs",
1237
1230
  headers={"Accept": "text/plain"},
1238
- params={"lines": lines} if lines is not None else None,
1231
+ params={
1232
+ "no_colors": "true",
1233
+ **({"lines": lines} if lines is not None else {}),
1234
+ },
1239
1235
  )
1240
1236
  except TimeoutError as e:
1241
1237
  raise HomeAssistantConnectionError(
@@ -1278,7 +1274,7 @@ class HomeAssistantClient:
1278
1274
 
1279
1275
  - ``"addons/<slug>"`` for app (add-on) container logs
1280
1276
  - ``"<service>"`` (where service ∈ {supervisor, host, core, dns, audio,
1281
- cli, multicast, observer}) for system-service logs
1277
+ multicast}) for system-service logs
1282
1278
 
1283
1279
  ``lines`` maps to the endpoint's ``?lines=`` journald-window query
1284
1280
  param; omitted → Supervisor's 100-line default window. Adding
@@ -1326,13 +1322,16 @@ class HomeAssistantClient:
1326
1322
 
1327
1323
  relative_path = f"/{path}/logs"
1328
1324
  headers = {"Accept": "text/plain"}
1329
- params = {"lines": lines} if lines is not None else None
1325
+ # Presence-triggered flag: journald output carries ANSI escapes otherwise.
1326
+ params: dict[str, Any] = {"no_colors": "true"}
1327
+ if lines is not None:
1328
+ params["lines"] = lines
1330
1329
  if offset is not None:
1331
1330
  # An offset window with no size asked for falls back to the
1332
1331
  # smallest one the Range syntax can express.
1333
1332
  size = lines if lines is not None else MIN_LOG_WINDOW_LINES
1334
1333
  headers["Range"] = self._journald_range_header(size, offset)
1335
- params = None
1334
+ params.pop("lines", None)
1336
1335
  logger.debug(
1337
1336
  "Fetching %s%s via Supervisor direct (%s)",
1338
1337
  get_supervisor_base_url(),
@@ -1419,11 +1418,11 @@ class HomeAssistantClient:
1419
1418
  ) -> str:
1420
1419
  """Fetch HA system-service logs.
1421
1420
 
1422
- ``service`` must be one of the eight Supervisor-managed services:
1423
- ``supervisor``, ``host``, ``core``, ``dns``, ``audio``, ``cli``,
1424
- ``multicast``, ``observer``. Caller is responsible for validating
1425
- ``service``; this helper performs no validation, and unsupported paths
1426
- are rejected by the selected direct-Supervisor or Core-proxy route.
1421
+ ``service`` must be one of the six Supervisor-managed services:
1422
+ ``supervisor``, ``host``, ``core``, ``dns``, ``audio``, ``multicast``.
1423
+ Caller is responsible for validating ``service``; this helper performs
1424
+ no validation, and unsupported paths are rejected by the selected
1425
+ direct-Supervisor or Core-proxy route.
1427
1426
 
1428
1427
  Branch on ``is_running_in_addon()`` — mirror of ``get_addon_logs``:
1429
1428
  inside the app (add-on) container goes directly to Supervisor at
@@ -1433,10 +1432,9 @@ class HomeAssistantClient:
1433
1432
  without Supervisor, pip pointing at a normal HA URL),
1434
1433
  falls back to the HA Core proxy at ``/api/hassio/{service}/logs``.
1435
1434
 
1436
- All eight service slugs are whitelisted in HA Core's hassio proxy
1437
- (``homeassistant/components/hassio/http.py`` — ``PATHS_ADMIN``), so
1438
- an admin LLA is sufficient to reach any of them from outside the
1439
- app.
1435
+ HA Core's hassio proxy accepts ``/cli`` and ``/observer`` too, but
1436
+ Supervisor serves no log route for either, so those always 404; the
1437
+ six slugs here are the ones with a real ``/<slug>/logs`` route.
1440
1438
  """
1441
1439
  if is_running_in_addon():
1442
1440
  return await self._supervisor_logs_get(service, lines=lines)
@@ -19,6 +19,10 @@ or somewhere in between. This module negotiates that with a single cached
19
19
  surface entirely; caps are cached as ``None`` and every consumer falls back
20
20
  to its legacy path.
21
21
 
22
+ ``read_info`` reads ``info`` fresh for callers that show a field which can
23
+ change while the client lives (the bug report's component version and webhook
24
+ auth mode); routing and gating keep using the snapshot.
25
+
22
26
  This mirrors the caller-token cache in ``tools_filesystem.py``: weak-keyed by
23
27
  client so multi-client / OAuth setups each negotiate independently and the
24
28
  entry self-evicts when a client is garbage-collected.
@@ -45,6 +49,8 @@ logger = logging.getLogger(__name__)
45
49
  # The WS command every 1.1.0+ component registers; probing it does double duty
46
50
  # (existence check + capability enumeration — see module docstring).
47
51
  INFO_COMMAND = "ha_mcp_tools/info"
52
+ # The ``result`` of an ``info`` call, as ``read_info`` returns it.
53
+ InfoResult = dict[str, Any]
48
54
 
49
55
  # HA's structured error code for a command no handler is registered for. Routing
50
56
  # keys off this (via the ``code`` attribute threaded onto
@@ -406,3 +412,61 @@ def invalidate_caps(client: Any) -> None:
406
412
  _CAPS_CACHE.pop(client, None)
407
413
  _NEGATIVE_CACHE_TS.pop(client, None)
408
414
  _TRANSIENT_NEGATIVE_TS.pop(client, None)
415
+
416
+
417
+ async def read_info(client: Any) -> InfoResult | None:
418
+ """The ``result`` of a fresh ``ha_mcp_tools/info`` call (#2584).
419
+
420
+ For callers that show a field which can change while the client lives:
421
+ the bug report's component version and webhook auth mode. Routing and
422
+ gating keep the ``get_component_caps`` snapshot, which lasts as long as the
423
+ client (for a server running outside HA, an HA restart does not end it),
424
+ while a component update changes the version and an options change the
425
+ mode. Only a component whose ``info`` the snapshot accepted is asked. The
426
+ call goes to ``send_command`` on the pooled WebSocket directly, as the
427
+ probe does, bypassing ``send_websocket_message``'s ERROR log (a report
428
+ quotes its log sections); an ``unknown_command`` drops the snapshot so the
429
+ next caller re-probes. None in that case and on any failure.
430
+ """
431
+ if await get_component_caps(client) is None:
432
+ return None
433
+ try:
434
+ ws = await get_websocket_client(
435
+ url=client.base_url,
436
+ token=client.token,
437
+ verify_ssl=getattr(client, "verify_ssl", None),
438
+ )
439
+ response = await ws.send_command(INFO_COMMAND)
440
+ except Exception as e: # noqa: BLE001
441
+ if is_unknown_command(e):
442
+ invalidate_caps(client)
443
+ logger.info("Fresh %s read failed: %s (%s)", INFO_COMMAND, e, type(e).__name__)
444
+ return None
445
+ result = response.get("result") if isinstance(response, dict) else None
446
+ return result if isinstance(result, dict) else None
447
+
448
+
449
+ async def read_component_version(client: Any, info: InfoResult | None) -> str | None:
450
+ """The component version for a report: from ``info``, else the snapshot's.
451
+
452
+ ``info`` is a ``read_info`` result. When that read failed, the snapshot
453
+ still shows the component is installed. After an ``unknown_command``,
454
+ ``read_info`` has dropped the snapshot, so the re-probe normally finds no
455
+ ``info`` either and the result is None. ``""`` when the component reports no
456
+ version; None only when there is no usable ``info``.
457
+ """
458
+ if info is not None:
459
+ return str(info.get("component_version") or "")
460
+ caps = await get_component_caps(client)
461
+ return caps.component_version if caps is not None else None
462
+
463
+
464
+ def webhook_auth(info: InfoResult | None) -> str | None:
465
+ """The server entry's webhook auth mode from a ``read_info`` result.
466
+
467
+ Python None, not the ``"none"`` mode: without ``info``, or when its
468
+ ``webhook_auth`` is missing (an older component) or not a string. The
469
+ component sends None without a running in-process server.
470
+ """
471
+ auth = info.get("webhook_auth") if info else None
472
+ return auth if isinstance(auth, str) else None
@@ -28,12 +28,14 @@ COMPACT_LOGBOOK_FIELDS = {
28
28
  }
29
29
 
30
30
 
31
- # Supervisor-managed system services exposed via /<slug>/logs. Set mirrors
32
- # HA Core's hassio HTTP proxy ``PATHS_ADMIN`` whitelist in
33
- # ``homeassistant/components/hassio/http.py``. See #1116 (original 7-service
34
- # scope) and #1260 (cli added — proxy supported it the whole time).
31
+ # Supervisor-managed system services exposed via /<slug>/logs. The set is
32
+ # Supervisor's own route list (its ``_register_advanced_logs`` call sites),
33
+ # not HA Core's hassio proxy allowlist: the proxy accepts /cli and /observer
34
+ # but Supervisor serves no log route for either, so they always 404. See
35
+ # #1116 (original seven-service scope, observer included) and #1260 (cli added
36
+ # off the proxy list).
35
37
  SYSTEM_SERVICE_SLUGS = frozenset(
36
- {"supervisor", "host", "core", "dns", "audio", "cli", "multicast", "observer"}
38
+ {"supervisor", "host", "core", "dns", "audio", "multicast"}
37
39
  )
38
40
 
39
41
  DEFAULT_LIMIT = 50
@@ -106,6 +108,8 @@ def _collect_log_warnings(
106
108
  source: str,
107
109
  level: str | None,
108
110
  entity_id: str | None,
111
+ device_id: str | None,
112
+ context_id: str | None,
109
113
  end_time: str | None,
110
114
  slug: str | None,
111
115
  order: Literal["newest", "oldest"],
@@ -117,10 +121,17 @@ def _collect_log_warnings(
117
121
  "Parameter 'order' does not apply to source='logger' "
118
122
  "(entries are sorted by integration name); ignored"
119
123
  )
120
- if source != "logbook" and any(p is not None for p in [entity_id, end_time]):
124
+ if source != "logbook" and any(
125
+ p is not None for p in [entity_id, device_id, context_id, end_time]
126
+ ):
121
127
  ignored = [
122
128
  p
123
- for p, v in [("entity_id", entity_id), ("end_time", end_time)]
129
+ for p, v in [
130
+ ("entity_id", entity_id),
131
+ ("device_id", device_id),
132
+ ("context_id", context_id),
133
+ ("end_time", end_time),
134
+ ]
124
135
  if v is not None
125
136
  ]
126
137
  warnings.append(
@@ -1,17 +1,17 @@
1
1
  """Log sources served by ``ha_get_logs`` from Home Assistant itself.
2
2
 
3
- Logbook, ``system_log``, the raw/structured error log, and the per-integration
4
- logger levels. Mixed into ``LogTools`` (``tools_logs``) rather than standing
5
- alone: every fetcher here is a thin shell around one client call, and the
6
- dispatch, validation and tool registration they share live with the host class.
7
- The Supervisor-backed sources are in ``log_sources_supervisor``.
3
+ ``system_log``, the raw/structured error log, and the per-integration logger
4
+ levels. The logbook lives in ``log_sources_logbook``; the Supervisor-backed
5
+ sources are in ``log_sources_supervisor``. Mixed into ``LogTools``
6
+ (``tools_logs``) rather than standing alone: every fetcher here is a thin shell
7
+ around one client call, and the dispatch, validation and tool registration they
8
+ share live with the host class.
8
9
 
9
10
  Split out of ``tools_utility`` under `.gemini/styleguide.md` § Tool
10
11
  Consolidation and Module Size.
11
12
  """
12
13
 
13
14
  import logging
14
- from datetime import UTC, datetime, timedelta
15
15
  from typing import Any, Literal
16
16
 
17
17
  from ha_mcp._vendor.fastmcp.exceptions import ToolError
@@ -37,9 +37,7 @@ from .log_common import (
37
37
  DEFAULT_LOG_LIMIT,
38
38
  _addon_auth_error_suggestions,
39
39
  _coerce_limit,
40
- _compact_logbook_entries,
41
40
  )
42
- from .response_helpers import add_timezone_metadata
43
41
  from .util_helpers import normalize_log_level
44
42
 
45
43
  logger = logging.getLogger(__name__)
@@ -112,233 +110,6 @@ class CoreLogSourcesMixin:
112
110
 
113
111
  _client: Any
114
112
 
115
- @staticmethod
116
- def _coerce_logbook_params(
117
- hours_back: int,
118
- limit: int | None,
119
- offset: int,
120
- ) -> tuple[int, int, int]:
121
- effective_limit = _coerce_limit(limit)
122
- return hours_back, effective_limit, offset
123
-
124
- @staticmethod
125
- def _build_pagination_hint(
126
- offset_int: int,
127
- effective_limit: int,
128
- total_entries: int,
129
- paginated_entries: Any,
130
- hours_back_int: int,
131
- end_time: str | None,
132
- entity_id: str | None,
133
- search: str | None,
134
- compact_bool: bool,
135
- order: Literal["newest", "oldest"] = "newest",
136
- ) -> str:
137
- """Build reproducible pagination hint string for logbook results.
138
-
139
- String values are quoted: the hint is meant to be copied back as a
140
- call, and an unquoted ``search=front door`` is not one.
141
- """
142
- next_offset = offset_int + effective_limit
143
- param_parts = [
144
- f"hours_back={hours_back_int}",
145
- f"limit={effective_limit}",
146
- f"offset={next_offset}",
147
- ]
148
- if entity_id:
149
- param_parts.append(f"entity_id={entity_id!r}")
150
- if end_time:
151
- param_parts.append(f"end_time={end_time!r}")
152
- if search:
153
- param_parts.append(f"search={search!r}")
154
- if not compact_bool:
155
- param_parts.append("compact=False")
156
- if order != "newest":
157
- param_parts.append(f"order={order!r}")
158
- param_str = ", ".join(param_parts)
159
- return (
160
- f"Showing entries {offset_int + 1}-{offset_int + len(paginated_entries)} of {total_entries}. "
161
- f"To get the next page, use: ha_get_logs({param_str})"
162
- )
163
-
164
- @staticmethod
165
- def _filter_logbook_by_search(
166
- response: Any, search: str | None
167
- ) -> tuple[Any, dict[str, str]]:
168
- """Filter logbook entries by search term across name/message/entity_id.
169
-
170
- Returns the (possibly filtered) response and a filters_applied dict
171
- recording which filters were used.
172
- """
173
- filters_applied: dict[str, str] = {}
174
- if search and isinstance(response, list):
175
- search_lower = search.lower()
176
- response = [
177
- e
178
- for e in response
179
- if isinstance(e, dict)
180
- and (
181
- search_lower in str(e.get("name", "")).lower()
182
- or search_lower in str(e.get("message", "")).lower()
183
- or search_lower in str(e.get("entity_id", "")).lower()
184
- )
185
- ]
186
- filters_applied["search"] = search
187
- return response, filters_applied
188
-
189
- @staticmethod
190
- def _paginate_logbook_entries(
191
- response: Any,
192
- offset_int: int,
193
- effective_limit: int,
194
- order: Literal["newest", "oldest"],
195
- ) -> tuple[Any, int, bool]:
196
- """Slice logbook entries into the requested page.
197
-
198
- HA's /logbook returns entries oldest-first. Takes a window from
199
- the end for newest-first (default), or from the start for
200
- oldest-first, with offset paging deeper in the chosen order.
201
- """
202
- total_entries = len(response) if isinstance(response, list) else 1
203
-
204
- if isinstance(response, list):
205
- if order == "newest":
206
- end = total_entries - offset_int
207
- start = max(end - effective_limit, 0)
208
- paginated_entries = (
209
- list(reversed(response[start:end])) if end > 0 else []
210
- )
211
- else:
212
- paginated_entries = response[offset_int : offset_int + effective_limit]
213
- has_more = offset_int + len(paginated_entries) < total_entries
214
- else:
215
- paginated_entries = response
216
- has_more = False
217
-
218
- return paginated_entries, total_entries, has_more
219
-
220
- @staticmethod
221
- def _logbook_error_suggestions(error_str: str) -> list[str]:
222
- """Build remediation suggestions for a logbook fetch failure.
223
-
224
- Adds server-crash-specific guidance when the error indicates a 500
225
- (heavy query causing HA to fail) on top of the general tips.
226
- """
227
- if "500" in error_str:
228
- return [
229
- "The query returned too many results causing a server error (500).",
230
- "This often happens with very active entities or long time periods.",
231
- "Try reducing 'hours_back' parameter (e.g., from 24 to 1 hour)",
232
- "Add a specific 'entity_id' filter to narrow down results",
233
- "If debugging an automation, filter by that automation's entity_id",
234
- "Use ha_report_issue to check Home Assistant logs for crash details",
235
- ]
236
- return [
237
- "Try reducing 'hours_back' parameter (e.g., from 24 to 1 hour)",
238
- "Add a specific 'entity_id' filter to narrow down results",
239
- ]
240
-
241
- async def _get_logbook(
242
- self,
243
- hours_back: int = 1,
244
- entity_id: str | None = None,
245
- end_time: str | None = None,
246
- limit: int | None = None,
247
- offset: int = 0,
248
- search: str | None = None,
249
- compact: bool = True,
250
- order: Literal["newest", "oldest"] = "newest",
251
- ) -> dict[str, Any]:
252
- """Fetch logbook entries with search and pagination."""
253
- hours_back_int, effective_limit, offset_int = self._coerce_logbook_params(
254
- hours_back, limit, offset
255
- )
256
-
257
- if end_time:
258
- try:
259
- end_dt = datetime.fromisoformat(end_time.replace("Z", "+00:00"))
260
- except ValueError:
261
- # Outside the fetch try-block below, so without this guard the
262
- # raw ValueError would bypass the structured ToolError shape.
263
- raise_tool_error(
264
- create_error_response(
265
- ErrorCode.VALIDATION_INVALID_PARAMETER,
266
- f"Invalid end_time '{end_time}': not an ISO 8601 timestamp",
267
- suggestions=[
268
- "Use ISO format, e.g. end_time='2026-08-28T01:00:00Z'"
269
- ],
270
- )
271
- )
272
- else:
273
- end_dt = datetime.now(UTC)
274
-
275
- start_dt = end_dt - timedelta(hours=hours_back_int)
276
- start_timestamp = start_dt.isoformat()
277
-
278
- try:
279
- response = await self._client.get_logbook(
280
- entity_id=entity_id, start_time=start_timestamp, end_time=end_time
281
- )
282
-
283
- response, filters_applied = self._filter_logbook_by_search(response, search)
284
-
285
- paginated_entries, total_entries, has_more = self._paginate_logbook_entries(
286
- response, offset_int, effective_limit, order
287
- )
288
-
289
- # In compact mode, strip entries to essential fields only.
290
- # This prevents full attribute dictionaries from exhausting
291
- # the LLM context window during debugging workflows.
292
- if compact and isinstance(paginated_entries, list):
293
- paginated_entries = _compact_logbook_entries(paginated_entries)
294
-
295
- logbook_data: dict[str, Any] = {
296
- "success": True,
297
- "source": "logbook",
298
- "entries": paginated_entries,
299
- "period": f"{hours_back_int} hours back from {end_dt.isoformat()}",
300
- "start_time": start_timestamp,
301
- "end_time": end_dt.isoformat(),
302
- "entity_filter": entity_id,
303
- "total_entries": total_entries,
304
- "returned_entries": len(paginated_entries)
305
- if isinstance(paginated_entries, list)
306
- else 1,
307
- "limit": effective_limit,
308
- "offset": offset_int,
309
- "order": order,
310
- "has_more": has_more,
311
- }
312
- if filters_applied:
313
- logbook_data["filters_applied"] = filters_applied
314
- if has_more:
315
- logbook_data["pagination_hint"] = self._build_pagination_hint(
316
- offset_int,
317
- effective_limit,
318
- total_entries,
319
- paginated_entries,
320
- hours_back_int,
321
- end_time,
322
- entity_id,
323
- search,
324
- compact,
325
- order,
326
- )
327
-
328
- return await add_timezone_metadata(self._client, logbook_data)
329
-
330
- except ToolError:
331
- raise
332
- except Exception as e:
333
- exception_to_structured_error(
334
- e,
335
- context={
336
- "period": f"{hours_back_int} hours back from {end_dt.isoformat()}",
337
- },
338
- suggestions=self._logbook_error_suggestions(str(e)),
339
- )
340
- raise # unreachable: exception_to_structured_error always raises
341
-
342
113
  @staticmethod
343
114
  def _system_log_sort_key(entry: Any) -> float:
344
115
  """Total-order-safe sort key for system_log entries.