ha-mcp-dev 9.2.0.dev3491__tar.gz → 9.3.0.dev3496__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 (853) hide show
  1. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/PKG-INFO +5 -7
  2. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/README.md +2 -2
  3. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/pyproject.toml +8 -5
  4. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/pyproject.toml.orig +14 -9
  5. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/__init__.py +17 -0
  6. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/__main__.py +11 -26
  7. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_rich_compat.py +1 -1
  8. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/auth/consent_form.py +1 -1
  9. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/backup_calendar.py +1 -1
  10. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/backup_manager.py +1 -1
  11. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/client/rest_client.py +2 -2
  12. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/client/websocket_client.py +5 -5
  13. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/config.py +2 -2
  14. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/config_backup.py +3 -3
  15. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/config_overrides.py +7 -7
  16. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/config_settings.py +1 -1
  17. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/dashboard_screenshot/capture.py +2 -2
  18. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/dashboard_screenshot/paths.py +1 -1
  19. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/log_filters.py +1 -1
  20. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/policy/decision_pin.py +2 -2
  21. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/policy/handlers.py +3 -3
  22. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/policy/model.py +1 -1
  23. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/policy/persistence.py +1 -1
  24. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/settings_ui/_handlers_advanced.py +1 -1
  25. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/settings_ui/_handlers_backups.py +2 -2
  26. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/settings_ui/_handlers_fs.py +1 -1
  27. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/settings_ui/_handlers_oauth_callbacks.py +1 -1
  28. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/settings_ui/_handlers_server.py +3 -3
  29. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/settings_ui/_handlers_theme.py +1 -1
  30. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/settings_ui/_handlers_tools.py +1 -1
  31. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/settings_ui/_supervisor.py +1 -1
  32. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/settings_ui/_theme.py +1 -1
  33. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/settings_ui/locales/README.md +1 -1
  34. ha_mcp_dev-9.3.0.dev3496/src/ha_mcp/settings_ui/locales/sr-Latn.json +112 -0
  35. ha_mcp_dev-9.3.0.dev3496/src/ha_mcp/settings_ui/locales/sr.json +112 -0
  36. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/stdio_settings_sidecar.py +1 -1
  37. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tool_dispatch.py +1 -1
  38. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/auto_backup.py +2 -2
  39. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/backup.py +1 -1
  40. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/blueprint_sources.py +1 -1
  41. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/component_api.py +1 -1
  42. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/config_helpers/icon_route.py +1 -1
  43. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/config_helpers/registry.py +2 -2
  44. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/config_write_helpers.py +1 -1
  45. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/dashboard_edit_errors.py +1 -1
  46. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/dashboard_read_errors.py +1 -1
  47. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/device_control.py +2 -2
  48. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/diagnostics_helpers.py +1 -1
  49. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/flow_helper_lookup.py +1 -1
  50. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/hacs_own_repository.py +1 -1
  51. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/helpers.py +2 -2
  52. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/history_response.py +1 -1
  53. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/resource_codec.py +1 -1
  54. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/response_helpers.py +1 -1
  55. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/tools_addons.py +5 -5
  56. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/tools_areas.py +1 -1
  57. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/tools_bug_report.py +2 -6
  58. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/tools_code.py +2 -2
  59. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/tools_config_dashboards.py +13 -13
  60. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/tools_config_scenes.py +1 -1
  61. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/tools_energy.py +1 -1
  62. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/tools_labels.py +1 -1
  63. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/tools_traces.py +1 -1
  64. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/tools_updates.py +3 -3
  65. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/tools_yaml_read.py +1 -1
  66. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/ws_waiters.py +3 -3
  67. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/update_check.py +0 -29
  68. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/utils/mcp_client_host.py +2 -2
  69. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/utils/python_sandbox.py +1 -1
  70. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/utils/usage_logger.py +1 -1
  71. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/visibility/enforcement.py +2 -2
  72. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/LICENSE +0 -0
  73. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_pypi_marker +0 -0
  74. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/__init__.py +0 -0
  75. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
  76. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
  77. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
  78. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
  79. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
  80. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
  81. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
  82. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
  83. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
  84. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
  85. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
  86. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
  87. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
  88. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
  89. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
  90. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
  91. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
  92. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
  93. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
  94. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev_security.py +0 -0
  95. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
  96. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
  97. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
  98. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
  99. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
  100. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
  101. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
  102. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
  103. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
  104. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
  105. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
  106. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
  107. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
  108. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
  109. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
  110. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
  111. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
  112. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
  113. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
  114. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
  115. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
  116. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
  117. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
  118. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
  119. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
  120. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
  121. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
  122. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
  123. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
  124. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
  125. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
  126. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
  127. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
  128. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
  129. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
  130. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
  131. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
  132. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
  133. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
  134. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
  135. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
  136. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/client/mixins/skills.py +0 -0
  137. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
  138. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
  139. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
  140. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
  141. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
  142. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
  143. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
  144. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
  145. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
  146. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
  147. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
  148. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
  149. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
  150. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
  151. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
  152. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
  153. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
  154. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
  155. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
  156. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
  157. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
  158. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
  159. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
  160. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
  161. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
  162. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
  163. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
  164. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
  165. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
  166. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
  167. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
  168. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
  169. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
  170. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
  171. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
  172. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
  173. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
  174. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/jev_search.py +0 -0
  175. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
  176. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
  177. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
  178. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
  179. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
  180. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
  181. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
  182. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
  183. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
  184. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
  185. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
  186. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
  187. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
  188. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
  189. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
  190. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
  191. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
  192. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
  193. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
  194. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
  195. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
  196. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
  197. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
  198. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
  199. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
  200. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
  201. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
  202. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
  203. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
  204. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
  205. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
  206. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
  207. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
  208. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
  209. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
  210. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
  211. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
  212. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
  213. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
  214. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
  215. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
  216. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
  217. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
  218. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
  219. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
  220. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
  221. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
  222. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
  223. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
  224. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
  225. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
  226. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
  227. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
  228. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
  229. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
  230. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
  231. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
  232. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
  233. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
  234. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
  235. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
  236. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
  237. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
  238. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
  239. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
  240. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
  241. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
  242. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
  243. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
  244. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
  245. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
  246. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
  247. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/mixins/extensions.py +0 -0
  248. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
  249. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
  250. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
  251. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
  252. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
  253. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
  254. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
  255. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
  256. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
  257. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
  258. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
  259. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
  260. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
  261. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
  262. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
  263. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
  264. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
  265. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
  266. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
  267. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
  268. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
  269. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
  270. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
  271. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
  272. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
  273. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
  274. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
  275. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
  276. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
  277. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
  278. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
  279. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
  280. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
  281. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
  282. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
  283. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
  284. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
  285. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
  286. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
  287. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
  288. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
  289. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
  290. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
  291. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
  292. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
  293. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
  294. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
  295. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
  296. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/skills/__init__.py +0 -0
  297. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/skills/_constants.py +0 -0
  298. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/skills/_resources.py +0 -0
  299. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/skills/_snapshot.py +0 -0
  300. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/skills/_source.py +0 -0
  301. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/skills/client.py +0 -0
  302. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/skills/extension.py +0 -0
  303. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/skills/models.py +0 -0
  304. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
  305. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
  306. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
  307. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
  308. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
  309. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
  310. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
  311. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
  312. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
  313. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
  314. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
  315. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
  316. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
  317. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
  318. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
  319. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
  320. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
  321. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
  322. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
  323. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
  324. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
  325. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
  326. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
  327. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
  328. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
  329. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
  330. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
  331. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
  332. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
  333. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
  334. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
  335. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
  336. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
  337. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
  338. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
  339. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
  340. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
  341. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
  342. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
  343. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
  344. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
  345. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
  346. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
  347. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
  348. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
  349. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
  350. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
  351. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
  352. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
  353. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
  354. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
  355. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
  356. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
  357. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
  358. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
  359. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
  360. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
  361. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
  362. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
  363. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
  364. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
  365. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
  366. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
  367. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
  368. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
  369. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
  370. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
  371. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
  372. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
  373. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
  374. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
  375. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
  376. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
  377. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
  378. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
  379. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
  380. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
  381. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
  382. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
  383. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
  384. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
  385. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
  386. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
  387. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
  388. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
  389. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
  390. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
  391. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
  392. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
  393. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
  394. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
  395. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
  396. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
  397. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
  398. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
  399. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
  400. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
  401. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
  402. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
  403. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
  404. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
  405. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
  406. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
  407. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
  408. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
  409. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
  410. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
  411. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
  412. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
  413. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
  414. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
  415. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
  416. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
  417. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
  418. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
  419. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
  420. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
  421. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
  422. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
  423. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
  424. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
  425. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
  426. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
  427. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
  428. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
  429. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
  430. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
  431. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
  432. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
  433. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
  434. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
  435. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
  436. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
  437. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
  438. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
  439. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
  440. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
  441. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
  442. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
  443. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
  444. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
  445. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
  446. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
  447. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
  448. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
  449. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
  450. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
  451. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
  452. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
  453. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
  454. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
  455. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
  456. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
  457. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
  458. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
  459. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
  460. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
  461. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/shared/_request_clock.py +0 -0
  462. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
  463. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
  464. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
  465. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
  466. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
  467. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
  468. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
  469. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
  470. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
  471. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
  472. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
  473. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
  474. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
  475. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
  476. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
  477. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
  478. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
  479. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
  480. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
  481. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
  482. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
  483. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
  484. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
  485. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
  486. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
  487. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
  488. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
  489. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
  490. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
  491. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
  492. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
  493. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
  494. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
  495. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
  496. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
  497. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
  498. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/requirements.txt +0 -0
  499. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
  500. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
  501. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
  502. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
  503. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
  504. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
  505. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
  506. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
  507. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
  508. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
  509. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
  510. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
  511. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
  512. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/client.py +0 -0
  513. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
  514. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
  515. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
  516. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
  517. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
  518. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
  519. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
  520. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
  521. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
  522. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
  523. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
  524. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
  525. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
  526. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
  527. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
  528. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
  529. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
  530. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
  531. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
  532. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
  533. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
  534. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
  535. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/server.py +0 -0
  536. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
  537. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
  538. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
  539. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
  540. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
  541. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
  542. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
  543. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
  544. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
  545. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
  546. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
  547. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
  548. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
  549. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
  550. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
  551. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
  552. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
  553. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
  554. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_vendor/websockets/version.py +0 -0
  555. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/_version.py +0 -0
  556. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/app_discovery.py +0 -0
  557. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/auth/__init__.py +0 -0
  558. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/auth/iss_stamp.py +0 -0
  559. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/auth/oidc_compat.py +0 -0
  560. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/auth/provider.py +0 -0
  561. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/backup_dashboards.py +0 -0
  562. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/backup_diff.py +0 -0
  563. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/backup_entities.py +0 -0
  564. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/backup_entity_ids.py +0 -0
  565. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/backup_files.py +0 -0
  566. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/backup_helper_target.py +0 -0
  567. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/backup_integrations.py +0 -0
  568. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/backup_tags.py +0 -0
  569. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/backup_todo.py +0 -0
  570. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/backup_zones.py +0 -0
  571. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/browser_landing.py +0 -0
  572. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/client/__init__.py +0 -0
  573. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/client/admin_routes.py +0 -0
  574. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/client/config_entry_read.py +0 -0
  575. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/client/error_log_journald.py +0 -0
  576. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/client/event_listeners.py +0 -0
  577. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/client/models.py +0 -0
  578. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/client/supervisor_client.py +0 -0
  579. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/client/websocket_listener.py +0 -0
  580. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/client/websocket_state.py +0 -0
  581. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/config_meta.py +0 -0
  582. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/config_registry.py +0 -0
  583. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
  584. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
  585. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/dashboard_screenshot/engine_compat.py +0 -0
  586. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
  587. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/dashboard_screenshot/theme_check.py +0 -0
  588. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
  589. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/errors.py +0 -0
  590. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/ha_request_queue.py +0 -0
  591. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/hacs_auto_refresh.py +0 -0
  592. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/http_transport.py +0 -0
  593. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/image_info.py +0 -0
  594. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/ipv6_lan_guard.py +0 -0
  595. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/listen_sockets.py +0 -0
  596. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/llm_exposure.py +0 -0
  597. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/mcp_client_context.py +0 -0
  598. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/policy/__init__.py +0 -0
  599. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/policy/approval_queue.py +0 -0
  600. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/policy/decisions.py +0 -0
  601. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/policy/editing.py +0 -0
  602. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/policy/evaluator.py +0 -0
  603. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/policy/events.py +0 -0
  604. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/policy/middleware.py +0 -0
  605. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/policy/mrtr.py +0 -0
  606. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/policy/server_channels.py +0 -0
  607. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/policy/value_sources.py +0 -0
  608. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/py.typed +0 -0
  609. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/read_only.py +0 -0
  610. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/redaction.py +0 -0
  611. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/renamed_tools.py +0 -0
  612. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  613. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  614. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
  615. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-actions.md +0 -0
  616. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
  617. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
  618. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  619. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  620. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  621. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  622. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  623. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  624. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  625. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
  626. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  627. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/triggers-and-conditions.md +0 -0
  628. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
  629. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/server.py +0 -0
  630. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/server_instructions.py +0 -0
  631. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/server_lifespan.py +0 -0
  632. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/server_tool_text.py +0 -0
  633. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/settings_ui/__init__.py +0 -0
  634. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/settings_ui/_i18n.py +0 -0
  635. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
  636. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/settings_ui/_persistence.py +0 -0
  637. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
  638. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/settings_ui/locales/az.json +0 -0
  639. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
  640. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/settings_ui/locales/de.json +0 -0
  641. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/settings_ui/locales/en.json +0 -0
  642. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
  643. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/settings_ui/locales/es.json +0 -0
  644. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
  645. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/settings_ui/locales/hu.json +0 -0
  646. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/settings_ui/locales/it.json +0 -0
  647. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
  648. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
  649. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
  650. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
  651. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
  652. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
  653. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
  654. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
  655. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/settings_ui/settings.css +0 -0
  656. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/settings_ui/settings.html +0 -0
  657. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/settings_ui/settings_js/01_i18n_state.js +0 -0
  658. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/settings_ui/settings_js/02_tools_restart.js +0 -0
  659. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/settings_ui/settings_js/03_render_save.js +0 -0
  660. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/settings_ui/settings_js/04_backups.js +0 -0
  661. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/settings_ui/settings_js/05_feature_flags.js +0 -0
  662. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/settings_ui/settings_js/06_policy_cards.js +0 -0
  663. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/settings_ui/settings_js/07_policy_actions.js +0 -0
  664. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/settings_ui/settings_js/08_advanced.js +0 -0
  665. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/settings_ui/settings_js/09_prefs_visibility.js +0 -0
  666. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/settings_ui/settings_js/10_oauth_callbacks.js +0 -0
  667. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/smoke_test.py +0 -0
  668. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/storage_helper_types.py +0 -0
  669. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/strict_bps.py +0 -0
  670. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tool_catalog.py +0 -0
  671. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/__init__.py +0 -0
  672. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/addon_connection_hints.py +0 -0
  673. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/area_messages.py +0 -0
  674. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/automation_errors.py +0 -0
  675. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/automation_registry_details.py +0 -0
  676. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/backup_access.py +0 -0
  677. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/backup_on_demand.py +0 -0
  678. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/backup_snapshot.py +0 -0
  679. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/backup_snapshot_restore.py +0 -0
  680. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  681. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/best_practice_result.py +0 -0
  682. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/best_practice_variables.py +0 -0
  683. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
  684. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/blueprint_write.py +0 -0
  685. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/bug_report_config.py +0 -0
  686. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/bug_report_redaction.py +0 -0
  687. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/bug_report_sources.py +0 -0
  688. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/bug_report_templates.py +0 -0
  689. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/bulk_selector.py +0 -0
  690. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/coercion.py +0 -0
  691. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/component_automation.py +0 -0
  692. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/component_config_entries.py +0 -0
  693. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/component_config_reads.py +0 -0
  694. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
  695. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/component_devices.py +0 -0
  696. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/component_flow.py +0 -0
  697. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/component_helper_collections.py +0 -0
  698. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/component_registries.py +0 -0
  699. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
  700. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/component_todo.py +0 -0
  701. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/config_entry_backup.py +0 -0
  702. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/config_entry_flow.py +0 -0
  703. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/config_entry_flow_errors.py +0 -0
  704. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
  705. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/config_entry_flow_introspect.py +0 -0
  706. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/config_entry_flow_progress.py +0 -0
  707. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/config_entry_flow_submit.py +0 -0
  708. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/config_entry_identity.py +0 -0
  709. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
  710. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/config_file_visibility.py +0 -0
  711. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/config_helpers/__init__.py +0 -0
  712. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/config_helpers/core_payload.py +0 -0
  713. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/config_helpers/create.py +0 -0
  714. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/config_helpers/describe.py +0 -0
  715. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/config_helpers/flow.py +0 -0
  716. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/config_helpers/listing.py +0 -0
  717. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/config_helpers/schemas.py +0 -0
  718. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/config_helpers/typed_config.py +0 -0
  719. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/config_helpers/update.py +0 -0
  720. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/config_helpers/validation.py +0 -0
  721. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/config_subentry_restore.py +0 -0
  722. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/config_write_errors.py +0 -0
  723. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/core_contract.py +0 -0
  724. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/dashboard_card_describe.py +0 -0
  725. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/dashboard_list_checks.py +0 -0
  726. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/dev_backup.py +0 -0
  727. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/device_enrichment.py +0 -0
  728. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/energy_preferences.py +0 -0
  729. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/entity_expose_batch.py +0 -0
  730. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/entity_param_parsing.py +0 -0
  731. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/entity_registration.py +0 -0
  732. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/entity_removal.py +0 -0
  733. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/entity_update_fields.py +0 -0
  734. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/error_log_parsing.py +0 -0
  735. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/event_call.py +0 -0
  736. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/event_listener_fields.py +0 -0
  737. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/file_edit_refusal.py +0 -0
  738. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/flow_translations.py +0 -0
  739. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/hacs_backend.py +0 -0
  740. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/hacs_registration.py +0 -0
  741. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/helper_flows.py +0 -0
  742. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/ignored_entries.py +0 -0
  743. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/integration_entry_state.py +0 -0
  744. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/integration_flow_steps.py +0 -0
  745. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/integration_schema.py +0 -0
  746. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/integration_ws_commands.py +0 -0
  747. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/log_common.py +0 -0
  748. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/log_sources.py +0 -0
  749. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/log_sources_fault.py +0 -0
  750. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/log_sources_logbook.py +0 -0
  751. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
  752. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/radio/__init__.py +0 -0
  753. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/radio/base.py +0 -0
  754. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/radio/matter.py +0 -0
  755. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/radio/thread.py +0 -0
  756. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/radio/zigbee.py +0 -0
  757. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/radio/zwave.py +0 -0
  758. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/radio/zwave_parameters.py +0 -0
  759. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/recorder_errors.py +0 -0
  760. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/reference_validator.py +0 -0
  761. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/registry.py +0 -0
  762. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
  763. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/resource_patch.py +0 -0
  764. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/scene_discovery.py +0 -0
  765. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/search/__init__.py +0 -0
  766. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/search/base.py +0 -0
  767. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/search/component.py +0 -0
  768. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/search/entities.py +0 -0
  769. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/search/legacy.py +0 -0
  770. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/search/modes.py +0 -0
  771. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/search/overview.py +0 -0
  772. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/search/response.py +0 -0
  773. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/search/state.py +0 -0
  774. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/server_version.py +0 -0
  775. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  776. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  777. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  778. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
  779. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  780. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  781. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/smart_search/_flow_helpers.py +0 -0
  782. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
  783. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  784. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  785. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  786. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/statistics_calendar.py +0 -0
  787. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/statistics_helpers.py +0 -0
  788. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/statistics_resets.py +0 -0
  789. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/system_restart.py +0 -0
  790. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/tool_hints.py +0 -0
  791. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
  792. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
  793. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  794. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/tools_calendar.py +0 -0
  795. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/tools_camera.py +0 -0
  796. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/tools_categories.py +0 -0
  797. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/tools_config_automations.py +0 -0
  798. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  799. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
  800. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
  801. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/tools_dev.py +0 -0
  802. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/tools_entities.py +0 -0
  803. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  804. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/tools_groups.py +0 -0
  805. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/tools_hacs.py +0 -0
  806. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/tools_history.py +0 -0
  807. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/tools_integrations.py +0 -0
  808. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/tools_logs.py +0 -0
  809. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/tools_radio.py +0 -0
  810. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/tools_registry.py +0 -0
  811. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/tools_resources.py +0 -0
  812. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/tools_search.py +0 -0
  813. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/tools_security_policy.py +0 -0
  814. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/tools_service.py +0 -0
  815. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/tools_services.py +0 -0
  816. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/tools_system.py +0 -0
  817. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/tools_themes.py +0 -0
  818. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/tools_todo.py +0 -0
  819. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/tools_utility.py +0 -0
  820. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  821. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  822. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/tools_zones.py +0 -0
  823. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/update_categories.py +0 -0
  824. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/util_helpers.py +0 -0
  825. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/validation_middleware.py +0 -0
  826. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/tools/yaml_extra_keys.py +0 -0
  827. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/transforms/__init__.py +0 -0
  828. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/transforms/categorized_search.py +0 -0
  829. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/transforms/compact_params.py +0 -0
  830. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/transforms/component_helpers.py +0 -0
  831. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/transforms/component_search.py +0 -0
  832. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  833. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/transforms/write_tool_note.py +0 -0
  834. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/transport_security.py +0 -0
  835. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/utils/__init__.py +0 -0
  836. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/utils/config_hash.py +0 -0
  837. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/utils/config_write_lock.py +0 -0
  838. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/utils/dashboard_patch.py +0 -0
  839. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/utils/data_paths.py +0 -0
  840. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
  841. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/utils/domain_handlers.py +0 -0
  842. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/utils/entity_membership.py +0 -0
  843. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  844. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  845. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/utils/operation_manager.py +0 -0
  846. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/utils/registry_update_lock.py +0 -0
  847. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/utils/skill_loader.py +0 -0
  848. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/visibility/__init__.py +0 -0
  849. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/visibility/config_files.py +0 -0
  850. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/visibility/identifier_aliases.py +0 -0
  851. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/visibility/model.py +0 -0
  852. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/src/ha_mcp/visibility/persistence.py +0 -0
  853. {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3496}/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.2.0.dev3491
3
+ Version: 9.3.0.dev3496
4
4
  Summary: Configure and automate Home Assistant with Claude, ChatGPT, and other AI assistants.
5
5
  Keywords: mcp,home-assistant,ai,automation,smart-home
6
6
  Author: Julien
@@ -10,12 +10,10 @@ License-File: LICENSE
10
10
  Classifier: Development Status :: 5 - Production/Stable
11
11
  Classifier: Intended Audience :: Developers
12
12
  Classifier: Programming Language :: Python :: 3
13
- Classifier: Programming Language :: Python :: 3.13
14
13
  Classifier: Programming Language :: Python :: 3.14
15
14
  Classifier: Topic :: Home Automation
16
15
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
17
- Requires-Dist: anyio>=4.10 ; python_full_version >= '3.14'
18
- Requires-Dist: anyio>=4.9 ; python_full_version < '3.14'
16
+ Requires-Dist: anyio>=4.10
19
17
  Requires-Dist: authlib>=1.6.11
20
18
  Requires-Dist: certifi>=2026.10.19
21
19
  Requires-Dist: cyclopts>=4.0.0
@@ -53,7 +51,7 @@ Requires-Dist: cryptography>=48.0.0,<51
53
51
  Requires-Dist: pydantic-monty==0.0.18
54
52
  Requires-Dist: tzdata>=2024.1
55
53
  Requires-Dist: packaging>=24.0
56
- Requires-Python: >=3.13, <3.15
54
+ Requires-Python: >=3.14, <3.15
57
55
  Project-URL: Homepage, https://github.com/homeassistant-ai/ha-mcp
58
56
  Project-URL: Bug Tracker, https://github.com/homeassistant-ai/ha-mcp/issues
59
57
  Project-URL: Repository, https://github.com/homeassistant-ai/ha-mcp
@@ -142,14 +140,14 @@ Prefer to run ha-mcp as a Home Assistant **app (add-on)**? On **Home Assistant O
142
140
 
143
141
  [Full app documentation →](homeassistant-addon/DOCS.md)
144
142
 
145
- > ⚠️ **Configure exactly one install method per client.** The custom component, the app, Docker/PyPI, and local stdio are independent ways to run the same server — pick one and point your AI client at that single URL. Keeping two entries for the same server in one client (for example a local `uvx ha-mcp@latest` entry with `HOMEASSISTANT_URL` / `HOMEASSISTANT_TOKEN` alongside an app or component URL) is a known cause of connection hangs.
143
+ > ⚠️ **Configure exactly one install method per client.** The custom component, the app, Docker/PyPI, and local stdio are independent ways to run the same server — pick one and point your AI client at that single URL. Keeping two entries for the same server in one client (for example a local `uvx --python 3.14 ha-mcp@latest` entry with `HOMEASSISTANT_URL` / `HOMEASSISTANT_TOKEN` alongside an app or component URL) is a known cause of connection hangs.
146
144
 
147
145
  ### Other install methods
148
146
 
149
147
  These run the server outside Home Assistant — useful for **Container** / **Core** installs (which can't run apps) or a separate host. The [Setup Wizard](https://homeassistant-ai.github.io/ha-mcp/setup/) generates the exact client-specific config for each.
150
148
 
151
149
  - **Docker (HTTP server):** run `ghcr.io/homeassistant-ai/ha-mcp` in HTTP mode, pointed at your Home Assistant URL and a long-lived token (an administrator's is recommended; non-admin tokens work with limitations), and connect your client to its secret URL. See the [Setup Wizard](https://homeassistant-ai.github.io/ha-mcp/setup/) for the full command and per-client config.
152
- - **PyPI / uvx (HTTP server):** run the published `ha-mcp` package with `uvx ha-mcp@latest` (or pip) as a streamable-HTTP server the same way. Details in the [Setup Wizard](https://homeassistant-ai.github.io/ha-mcp/setup/).
150
+ - **PyPI / uvx (HTTP server):** run the published `ha-mcp` package with `uvx --python 3.14 ha-mcp@latest` (or pip) as a streamable-HTTP server the same way. Details in the [Setup Wizard](https://homeassistant-ai.github.io/ha-mcp/setup/).
153
151
  - **Local stdio (not recommended):** runs ha-mcp on your own machine over stdio. The one-command installers in the **Demo server** section below use this path; the [Setup Wizard](https://homeassistant-ai.github.io/ha-mcp/setup/) covers connecting it to your own Home Assistant.
154
152
  - **OIDC authentication:** gate remote access behind an external identity provider (Authentik, Keycloak, Auth0, etc.) instead of a secret URL — all authenticated users share the server's Home Assistant credentials. See [OIDC Mode](docs/oidc.md).
155
153
 
@@ -81,14 +81,14 @@ Prefer to run ha-mcp as a Home Assistant **app (add-on)**? On **Home Assistant O
81
81
 
82
82
  [Full app documentation →](homeassistant-addon/DOCS.md)
83
83
 
84
- > ⚠️ **Configure exactly one install method per client.** The custom component, the app, Docker/PyPI, and local stdio are independent ways to run the same server — pick one and point your AI client at that single URL. Keeping two entries for the same server in one client (for example a local `uvx ha-mcp@latest` entry with `HOMEASSISTANT_URL` / `HOMEASSISTANT_TOKEN` alongside an app or component URL) is a known cause of connection hangs.
84
+ > ⚠️ **Configure exactly one install method per client.** The custom component, the app, Docker/PyPI, and local stdio are independent ways to run the same server — pick one and point your AI client at that single URL. Keeping two entries for the same server in one client (for example a local `uvx --python 3.14 ha-mcp@latest` entry with `HOMEASSISTANT_URL` / `HOMEASSISTANT_TOKEN` alongside an app or component URL) is a known cause of connection hangs.
85
85
 
86
86
  ### Other install methods
87
87
 
88
88
  These run the server outside Home Assistant — useful for **Container** / **Core** installs (which can't run apps) or a separate host. The [Setup Wizard](https://homeassistant-ai.github.io/ha-mcp/setup/) generates the exact client-specific config for each.
89
89
 
90
90
  - **Docker (HTTP server):** run `ghcr.io/homeassistant-ai/ha-mcp` in HTTP mode, pointed at your Home Assistant URL and a long-lived token (an administrator's is recommended; non-admin tokens work with limitations), and connect your client to its secret URL. See the [Setup Wizard](https://homeassistant-ai.github.io/ha-mcp/setup/) for the full command and per-client config.
91
- - **PyPI / uvx (HTTP server):** run the published `ha-mcp` package with `uvx ha-mcp@latest` (or pip) as a streamable-HTTP server the same way. Details in the [Setup Wizard](https://homeassistant-ai.github.io/ha-mcp/setup/).
91
+ - **PyPI / uvx (HTTP server):** run the published `ha-mcp` package with `uvx --python 3.14 ha-mcp@latest` (or pip) as a streamable-HTTP server the same way. Details in the [Setup Wizard](https://homeassistant-ai.github.io/ha-mcp/setup/).
92
92
  - **Local stdio (not recommended):** runs ha-mcp on your own machine over stdio. The one-command installers in the **Demo server** section below use this path; the [Setup Wizard](https://homeassistant-ai.github.io/ha-mcp/setup/) covers connecting it to your own Home Assistant.
93
93
  - **OIDC authentication:** gate remote access behind an external identity provider (Authentik, Keycloak, Auth0, etc.) instead of a secret URL — all authenticated users share the server's Home Assistant credentials. See [OIDC Mode](docs/oidc.md).
94
94
 
@@ -4,10 +4,10 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "9.2.0.dev3491"
7
+ version = "9.3.0.dev3496"
8
8
  description = "Configure and automate Home Assistant with Claude, ChatGPT, and other AI assistants."
9
9
  readme = "README.md"
10
- requires-python = ">=3.13,<3.15"
10
+ requires-python = ">=3.14,<3.15"
11
11
  license = "MIT"
12
12
  license-files = ["LICENSE"]
13
13
  keywords = [
@@ -21,14 +21,12 @@ classifiers = [
21
21
  "Development Status :: 5 - Production/Stable",
22
22
  "Intended Audience :: Developers",
23
23
  "Programming Language :: Python :: 3",
24
- "Programming Language :: Python :: 3.13",
25
24
  "Programming Language :: Python :: 3.14",
26
25
  "Topic :: Home Automation",
27
26
  "Topic :: Software Development :: Libraries :: Python Modules",
28
27
  ]
29
28
  dependencies = [
30
- "anyio>=4.10; python_version >= '3.14'",
31
- "anyio>=4.9; python_version < '3.14'",
29
+ "anyio>=4.10",
32
30
  "authlib>=1.6.11",
33
31
  "certifi>=2026.10.19",
34
32
  "cyclopts>=4.0.0",
@@ -365,6 +363,11 @@ extend-exclude = [
365
363
  "custom_components/**/*.json",
366
364
  ]
367
365
 
366
+ [tool.ruff.per-file-target-version]
367
+ "src/ha_mcp/__init__.py" = "py313"
368
+ "homeassistant-addon-webhook-proxy/**" = "py313"
369
+ "homeassistant-addon-webhook-proxy-dev/**" = "py313"
370
+
368
371
  [tool.ruff.lint]
369
372
  select = [
370
373
  "E",
@@ -4,15 +4,13 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "9.2.0.dev3491"
7
+ version = "9.3.0.dev3496"
8
8
  description = "Configure and automate Home Assistant with Claude, ChatGPT, and other AI assistants."
9
9
  readme = "README.md"
10
10
  # Upper bound widened to <3.15 so the package installs on Home Assistant's
11
11
  # interpreter when run in-process by the ha_mcp_tools component (HA
12
- # core-2026.7 ships Python 3.14). ruff infers its target from this floor, so
13
- # it writes no 3.14-only syntax while 3.13 can still install; CI, mypy, the
14
- # images and the dev environment run 3.14.
15
- requires-python = ">=3.13,<3.15"
12
+ # core-2026.7 ships Python 3.14).
13
+ requires-python = ">=3.14,<3.15"
16
14
  license = "MIT"
17
15
  license-files = ["LICENSE"]
18
16
  authors = [
@@ -23,7 +21,6 @@ classifiers = [
23
21
  "Development Status :: 5 - Production/Stable",
24
22
  "Intended Audience :: Developers",
25
23
  "Programming Language :: Python :: 3",
26
- "Programming Language :: Python :: 3.13",
27
24
  "Programming Language :: Python :: 3.14",
28
25
  "Topic :: Home Automation",
29
26
  "Topic :: Software Development :: Libraries :: Python Modules",
@@ -32,8 +29,7 @@ classifiers = [
32
29
  dependencies = [
33
30
  # fastmcp/mcp/mcp-types are vendored (scripts/vendor_fastmcp.py) so HA
34
31
  # Core's own mcp 1.x pin can't conflict. Below: their runtime requirements.
35
- "anyio>=4.10; python_version >= '3.14'",
36
- "anyio>=4.9; python_version < '3.14'",
32
+ "anyio>=4.10",
37
33
  "authlib>=1.6.11",
38
34
  "certifi>=2026.10.19",
39
35
  "cyclopts>=4.0.0",
@@ -438,6 +434,15 @@ extend-exclude = [
438
434
  "custom_components/**/*.json",
439
435
  ]
440
436
 
437
+
438
+ # 3.13 syntax where an older Python must still parse the code: the package's
439
+ # Python-version guard (to print its error instead of a SyntaxError), and the
440
+ # Webhook Proxy, whose component runs on the user's Home Assistant.
441
+ [tool.ruff.per-file-target-version]
442
+ "src/ha_mcp/__init__.py" = "py313"
443
+ "homeassistant-addon-webhook-proxy/**" = "py313"
444
+ "homeassistant-addon-webhook-proxy-dev/**" = "py313"
445
+
441
446
  [tool.ruff.lint]
442
447
  select = [
443
448
  "E", # pycodestyle errors
@@ -696,7 +701,7 @@ dev = [
696
701
 
697
702
  [tool.uv]
698
703
  # The dev group's homeassistant requires Python >=3.14.2; the published
699
- # package keeps >=3.13, so only the lock is narrowed.
704
+ # package keeps >=3.14, so only the lock is narrowed.
700
705
  environments = ["python_full_version >= '3.14.2'"]
701
706
 
702
707
  [tool.uv.sources]
@@ -5,6 +5,23 @@ A Model Context Protocol server that provides complete control over Home Assista
5
5
  through REST API and WebSocket integration.
6
6
  """
7
7
 
8
+ import sys
9
+
10
+ if sys.version_info < (3, 14):
11
+ # uvx and pip can be forced past requires-python. This runs before any
12
+ # submodule is imported, so an older Python stops here instead of at a
13
+ # SyntaxError in one; pyproject.toml keeps ruff on 3.13 syntax for this
14
+ # file. stderr directly: logging is not set up yet.
15
+ sys.stderr.write(
16
+ f"ERROR: ha-mcp requires Python 3.14+, but you are running Python "
17
+ f"{sys.version_info.major}.{sys.version_info.minor}.\n"
18
+ "If using uvx, add '--python 3.14' to your config args:\n"
19
+ ' "args": ["--python", "3.14", "--refresh", "ha-mcp@latest"]\n'
20
+ "Or install Python 3.14: brew install python@3.14 (macOS) / "
21
+ "sudo apt install python3.14 (Linux)\n"
22
+ )
23
+ sys.exit(1)
24
+
8
25
  # Must be imported before anything that reaches fastmcp (``.auth`` below does),
9
26
  # because fastmcp configures rich logging at import time and dies on a rich
10
27
  # older than 13.9.4. Importing this module applies the shim. See #2186.
@@ -1,20 +1,5 @@
1
1
  """Home Assistant MCP Server."""
2
2
 
3
- import sys
4
-
5
- if sys.version_info < (3, 13): # noqa: UP036 — uvx can bypass requires-python and run on 3.12
6
- # Write directly to stderr (not print) so this import-time version gate
7
- # fires before any 3.13-only syntax in the rest of the module is parsed.
8
- sys.stderr.write(
9
- f"ERROR: ha-mcp requires Python 3.13+, but you are running Python "
10
- f"{sys.version_info.major}.{sys.version_info.minor}.\n"
11
- "If using uvx, add '--python 3.13' to your config args:\n"
12
- ' "args": ["--python", "3.13", "--refresh", "ha-mcp@latest"]\n'
13
- "Or install Python 3.13: brew install python@3.13 (macOS) / "
14
- "sudo apt install python3.13 (Linux)\n"
15
- )
16
- sys.exit(1)
17
-
18
3
  import truststore
19
4
 
20
5
  truststore.inject_into_ssl()
@@ -65,7 +50,7 @@ class OAuthProxyClient:
65
50
  self._oauth_clients: dict[str, HomeAssistantClient] = {}
66
51
  self._lock = threading.Lock()
67
52
 
68
- def current_client(self) -> "HomeAssistantClient":
53
+ def current_client(self) -> HomeAssistantClient:
69
54
  """The requesting user's client; per-user caches key on it, not the proxy."""
70
55
  from ha_mcp._vendor.fastmcp.server.dependencies import get_access_token
71
56
  from ha_mcp.client.rest_client import (
@@ -215,7 +200,7 @@ def _check_stdin_available() -> bool:
215
200
  try:
216
201
  fd = sys.stdin.fileno()
217
202
  mode = os.fstat(fd).st_mode
218
- except (ValueError, OSError):
203
+ except ValueError, OSError:
219
204
  # fileno() or fstat() can raise if stdin is not a real file
220
205
  return False
221
206
 
@@ -271,7 +256,7 @@ For setup instructions, see:
271
256
  sys.exit(1)
272
257
 
273
258
 
274
- def _validate_standard_credentials(settings: "Settings") -> None:
259
+ def _validate_standard_credentials(settings: Settings) -> None:
275
260
  """Exit with error if HA credentials are OAuth sentinels in standard (non-OAuth) mode."""
276
261
  from ha_mcp.config import OAUTH_MODE_TOKEN, OAUTH_MODE_URL
277
262
 
@@ -327,7 +312,7 @@ def _http_run_kwargs(host: str, port: int, path: str) -> dict[str, Any]:
327
312
  }
328
313
 
329
314
 
330
- def _create_server() -> "HomeAssistantSmartMCPServer":
315
+ def _create_server() -> HomeAssistantSmartMCPServer:
331
316
  """Create server instance (deferred to avoid import during smoke test)."""
332
317
  from pydantic import ValidationError
333
318
 
@@ -350,10 +335,10 @@ def _create_server() -> "HomeAssistantSmartMCPServer":
350
335
 
351
336
 
352
337
  # Lazy server creation - only create when needed
353
- _server: "HomeAssistantSmartMCPServer | None" = None
338
+ _server: HomeAssistantSmartMCPServer | None = None
354
339
 
355
340
 
356
- def _get_mcp() -> "FastMCP":
341
+ def _get_mcp() -> FastMCP:
357
342
  """Get the MCP instance, creating server if needed."""
358
343
  global _server
359
344
  if _server is None:
@@ -361,7 +346,7 @@ def _get_mcp() -> "FastMCP":
361
346
  return _server.mcp
362
347
 
363
348
 
364
- def _get_server() -> "HomeAssistantSmartMCPServer":
349
+ def _get_server() -> HomeAssistantSmartMCPServer:
365
350
  """Get the server instance, creating if needed."""
366
351
  global _server
367
352
  if _server is None:
@@ -559,7 +544,7 @@ async def _cleanup_resources() -> None:
559
544
  logger.info("Server resources cleaned up")
560
545
 
561
546
 
562
- def _log_cleanup_result(task: "asyncio.Future[None]") -> None:
547
+ def _log_cleanup_result(task: asyncio.Future[None]) -> None:
563
548
  """Consume the cleanup task's outcome so a failure is never silent.
564
549
 
565
550
  ``asyncio.wait`` does not retrieve results, and the timeout path
@@ -1138,7 +1123,7 @@ def _oidc_allowed_client_redirect_uris() -> list[str] | None:
1138
1123
 
1139
1124
 
1140
1125
  def register_browser_landing(
1141
- mcp_instance: "FastMCP | _DeferredMCP",
1126
+ mcp_instance: FastMCP | _DeferredMCP,
1142
1127
  path: str,
1143
1128
  ) -> None:
1144
1129
  """Register the friendly browser landing page and tidy the uvicorn access log.
@@ -1277,8 +1262,8 @@ def _resolve_settings_secret_path() -> str | None:
1277
1262
 
1278
1263
 
1279
1264
  def _register_settings_ui_secret_path(
1280
- mcp: "FastMCP",
1281
- server: "HomeAssistantSmartMCPServer",
1265
+ mcp: FastMCP,
1266
+ server: HomeAssistantSmartMCPServer,
1282
1267
  host: str,
1283
1268
  port: int,
1284
1269
  mcp_path: str,
@@ -67,7 +67,7 @@ def ensure_rich_handler_compat() -> bool:
67
67
 
68
68
  try:
69
69
  parameters = inspect.signature(original_init).parameters
70
- except (TypeError, ValueError): # pragma: no cover - exotic rich build
70
+ except TypeError, ValueError: # pragma: no cover - exotic rich build
71
71
  logger.debug("RichHandler.__init__ is not introspectable; skipping shim")
72
72
  return False
73
73
 
@@ -14,7 +14,7 @@ def _extract_domain(redirect_uri: str) -> str:
14
14
  try:
15
15
  parsed = urlparse(redirect_uri)
16
16
  return parsed.netloc or redirect_uri
17
- except (AttributeError, TypeError, ValueError):
17
+ except AttributeError, TypeError, ValueError:
18
18
  return redirect_uri
19
19
 
20
20
 
@@ -76,7 +76,7 @@ async def _locate_calendar_event(
76
76
  days = int(
77
77
  getattr(get_global_settings(), "auto_backup_calendar_lookahead_days", 7)
78
78
  )
79
- except (AttributeError, ImportError, ValueError, TypeError):
79
+ except AttributeError, ImportError, ValueError, TypeError:
80
80
  days = 7
81
81
  days = max(1, min(365, days))
82
82
  now = datetime.now(UTC)
@@ -1979,7 +1979,7 @@ def get_backup_manager(client: Any, settings: Any) -> BackupManager:
1979
1979
  register_default_handlers(mgr, client)
1980
1980
  try:
1981
1981
  client._auto_backup_manager = mgr
1982
- except (AttributeError, TypeError):
1982
+ except AttributeError, TypeError:
1983
1983
  # Read-only client (e.g. a slotted mock) — manager still works,
1984
1984
  # just isn't cached.
1985
1985
  pass
@@ -268,7 +268,7 @@ def _pick_render_error(first: str, queue: asyncio.Queue[dict[str, Any]]) -> str:
268
268
  while True:
269
269
  try:
270
270
  event = queue.get_nowait().get("event") or {}
271
- except (asyncio.QueueEmpty, asyncio.QueueShutDown):
271
+ except asyncio.QueueEmpty, asyncio.QueueShutDown:
272
272
  break
273
273
  error = event.get("error")
274
274
  if event.get("level") == "ERROR" and isinstance(error, str):
@@ -406,7 +406,7 @@ class HomeAssistantClient:
406
406
 
407
407
  logger.info(f"Initialized Home Assistant client for {self.base_url}")
408
408
 
409
- async def __aenter__(self) -> "HomeAssistantClient":
409
+ async def __aenter__(self) -> HomeAssistantClient:
410
410
  """Async context manager entry."""
411
411
  return self
412
412
 
@@ -1242,7 +1242,7 @@ class HomeAssistantWebSocketClient:
1242
1242
  MAX_POOL_SIZE = 50
1243
1243
 
1244
1244
 
1245
- def _log_stale_disconnect(future: "concurrent.futures.Future[None]") -> None:
1245
+ def _log_stale_disconnect(future: concurrent.futures.Future[None]) -> None:
1246
1246
  """Report how a disconnect scheduled on a stale event loop ended.
1247
1247
 
1248
1248
  Nothing awaits that future, so without this the outcome would be invisible
@@ -1274,7 +1274,7 @@ class WebSocketManager:
1274
1274
  _lock_loop: asyncio.AbstractEventLoop | None = None
1275
1275
  _client_factory: Callable[..., HomeAssistantWebSocketClient] | None = None
1276
1276
 
1277
- def __new__(cls) -> "WebSocketManager":
1277
+ def __new__(cls) -> WebSocketManager:
1278
1278
  if cls._instance is None:
1279
1279
  cls._instance = super().__new__(cls)
1280
1280
  cls._instance._clients = {}
@@ -1492,7 +1492,7 @@ class WebSocketManager:
1492
1492
  # doing network I/O and leave a fresh connection retained
1493
1493
  # in the pool.
1494
1494
  raise
1495
- except (OSError, RuntimeError):
1495
+ except OSError, RuntimeError:
1496
1496
  logger.warning(
1497
1497
  "Error disconnecting stale WebSocket client",
1498
1498
  exc_info=True,
@@ -1547,7 +1547,7 @@ class WebSocketManager:
1547
1547
  # cancelled caller (mirror of the stale-replacement clause
1548
1548
  # in get_client).
1549
1549
  raise
1550
- except (OSError, RuntimeError):
1550
+ except OSError, RuntimeError:
1551
1551
  logger.warning(
1552
1552
  "Error disconnecting evicted WebSocket client",
1553
1553
  exc_info=True,
@@ -1577,7 +1577,7 @@ class WebSocketManager:
1577
1577
  for client in clients:
1578
1578
  try:
1579
1579
  await client.disconnect()
1580
- except (OSError, RuntimeError, asyncio.CancelledError):
1580
+ except OSError, RuntimeError, asyncio.CancelledError:
1581
1581
  logger.warning(
1582
1582
  "Error disconnecting WebSocket client", exc_info=True
1583
1583
  )
@@ -75,7 +75,7 @@ __all__ = [
75
75
  ]
76
76
 
77
77
 
78
- def parse_extra_yaml_write_keys(settings: "Settings") -> list[str]:
78
+ def parse_extra_yaml_write_keys(settings: Settings) -> list[str]:
79
79
  """Parse ``extra_yaml_write_keys`` into a clean key list (#1887).
80
80
 
81
81
  Whitespace and empty entries are dropped and the result is deduplicated
@@ -212,7 +212,7 @@ def _reset_embedded_connection() -> None:
212
212
  _EMBEDDED_CONNECTION.clear()
213
213
 
214
214
 
215
- def _apply_embedded_connection(settings: "Settings") -> None:
215
+ def _apply_embedded_connection(settings: Settings) -> None:
216
216
  """Apply the in-process embedded HA connection (url/token/verify_ssl) if registered.
217
217
 
218
218
  No-op outside embedded mode. Plain ``setattr`` (``validate_assignment`` is off
@@ -88,7 +88,7 @@ def _read_backup_override_file() -> dict[str, object]:
88
88
  from .utils.data_paths import get_data_dir
89
89
 
90
90
  path: Path = get_data_dir() / _BACKUP_OVERRIDE_FILENAME
91
- except (RuntimeError, OSError):
91
+ except RuntimeError, OSError:
92
92
  # Couldn't resolve the data dir at all — user has no override
93
93
  # file by definition. Silent.
94
94
  return {}
@@ -190,7 +190,7 @@ def _coerce_backup_override_value(
190
190
 
191
191
 
192
192
  def _apply_one_backup_override(
193
- settings: "Settings",
193
+ settings: Settings,
194
194
  field_name: str,
195
195
  env_name: str,
196
196
  ftype: RegistryFieldType,
@@ -217,7 +217,7 @@ def _apply_one_backup_override(
217
217
  )
218
218
 
219
219
 
220
- def _apply_backup_overrides(settings: "Settings") -> None:
220
+ def _apply_backup_overrides(settings: Settings) -> None:
221
221
  """Patch ``settings`` with values from the override file, in place.
222
222
 
223
223
  Honors the "env var wins" contract: a field whose env var is set in
@@ -136,7 +136,7 @@ def _read_feature_flag_override_file() -> dict[str, object]:
136
136
  from .utils.data_paths import get_data_dir
137
137
 
138
138
  path: Path = get_data_dir() / _FEATURE_FLAG_OVERRIDE_FILENAME
139
- except (RuntimeError, OSError):
139
+ except RuntimeError, OSError:
140
140
  # Couldn't resolve the data dir at all — user has no override
141
141
  # file by definition. Silent.
142
142
  return {}
@@ -215,7 +215,7 @@ def _coerce_feature_flag_value(
215
215
 
216
216
 
217
217
  def _apply_one_feature_flag_override(
218
- settings: "Settings",
218
+ settings: Settings,
219
219
  field_name: str,
220
220
  env_name: str,
221
221
  ftype: RegistryFieldType,
@@ -256,7 +256,7 @@ def _apply_one_feature_flag_override(
256
256
  )
257
257
 
258
258
 
259
- def _apply_beta_master_gate(settings: "Settings") -> None:
259
+ def _apply_beta_master_gate(settings: Settings) -> None:
260
260
  """Force BETA_FEATURE_FIELDS to False when ``enable_beta_features`` is off.
261
261
 
262
262
  This is the "master toggle" semantics: even a power user who sets
@@ -300,7 +300,7 @@ def _apply_beta_master_gate(settings: "Settings") -> None:
300
300
  )
301
301
 
302
302
 
303
- def _apply_feature_flag_overrides(settings: "Settings") -> None:
303
+ def _apply_feature_flag_overrides(settings: Settings) -> None:
304
304
  """Patch ``settings`` with override-file values + apply the master beta gate.
305
305
 
306
306
  Two behaviors interleave:
@@ -429,7 +429,7 @@ def _advanced_override_passes_constraints(fname: str, coerced: Any) -> bool:
429
429
 
430
430
 
431
431
  def _apply_one_advanced_override(
432
- settings: "Settings",
432
+ settings: Settings,
433
433
  fname: str,
434
434
  env_name: str,
435
435
  ftype: RegistryFieldType,
@@ -461,7 +461,7 @@ def _apply_one_advanced_override(
461
461
  return
462
462
  try:
463
463
  setattr(settings, fname, coerced)
464
- except (ValueError, TypeError):
464
+ except ValueError, TypeError:
465
465
  # Narrowed from bare ``Exception`` to match the parallel
466
466
  # _apply_feature_flag_overrides handler. Pydantic validation
467
467
  # surfaces failures as ValueError; an
@@ -474,7 +474,7 @@ def _apply_one_advanced_override(
474
474
  )
475
475
 
476
476
 
477
- def _apply_advanced_overrides(settings: "Settings") -> None:
477
+ def _apply_advanced_overrides(settings: Settings) -> None:
478
478
  """Patch ``settings`` with advanced-section override values from
479
479
  ``feature_flags.json``.
480
480
 
@@ -72,7 +72,7 @@ def _parse_lenient(
72
72
  return None, "not a number"
73
73
  try:
74
74
  val = float(v) # type: ignore[arg-type]
75
- except (ValueError, TypeError):
75
+ except ValueError, TypeError:
76
76
  return None, "not a number"
77
77
  if val == setting.off_value:
78
78
  return int(val), None
@@ -757,7 +757,7 @@ async def _request_or_collect_failure(
757
757
  raise
758
758
  try:
759
759
  failure = json.loads(str(exc))
760
- except (json.JSONDecodeError, TypeError):
760
+ except json.JSONDecodeError, TypeError:
761
761
  failure = None
762
762
  if not isinstance(failure, dict):
763
763
  failure = create_error_response(
@@ -825,7 +825,7 @@ def _reraise_with_guard_warnings(error: ToolError, warnings: list[str]) -> NoRet
825
825
  raise error
826
826
  try:
827
827
  payload = json.loads(str(error))
828
- except (json.JSONDecodeError, TypeError):
828
+ except json.JSONDecodeError, TypeError:
829
829
  payload = None
830
830
  if not isinstance(payload, dict):
831
831
  raise error
@@ -714,7 +714,7 @@ async def _validate_legacy_dashboard_root(
714
714
  except ToolError as exc:
715
715
  try:
716
716
  error_payload = json.loads(str(exc))
717
- except (json.JSONDecodeError, TypeError):
717
+ except json.JSONDecodeError, TypeError:
718
718
  # A non-JSON ToolError (e.g. a WS-layer error whose str() is not
719
719
  # the raise_tool_error JSON form) must surface as its original
720
720
  # ToolError, not as the leaked parse exception.
@@ -43,7 +43,7 @@ class StatelessSessionLogFilter(logging.Filter):
43
43
  return True
44
44
  try:
45
45
  message = record.getMessage()
46
- except (ValueError, TypeError):
46
+ except ValueError, TypeError:
47
47
  # A malformed %-format record on this logger is not our target, and
48
48
  # a filter must not raise: filters run in Logger.handle() with no
49
49
  # exception handling, so a raise would crash the logging call.
@@ -160,7 +160,7 @@ def _load_record(data_dir: Path) -> tuple[str, dict[str, Any] | None]:
160
160
  raw = json.loads(path.read_text(encoding="utf-8"))
161
161
  except FileNotFoundError:
162
162
  return PIN_ABSENT, None
163
- except (OSError, ValueError):
163
+ except OSError, ValueError:
164
164
  # ValueError rather than JSONDecodeError alone: reading the bytes can
165
165
  # fail before the parser ever sees them. A file holding invalid UTF-8
166
166
  # raises UnicodeDecodeError here, and that is the same answer to the
@@ -193,7 +193,7 @@ def _decode_record(record: dict[str, Any]) -> tuple[bytes, bytes, int] | None:
193
193
  expected = base64.b64decode(record["hash"], validate=True)
194
194
  iterations = int(record["iterations"])
195
195
  algorithm = record["algorithm"]
196
- except (KeyError, TypeError, ValueError, OverflowError, binascii.Error):
196
+ except KeyError, TypeError, ValueError, OverflowError, binascii.Error:
197
197
  # OverflowError is not a ValueError: a JSON work factor written in
198
198
  # exponent form, ``1e309``, parses to an infinite float, and int()
199
199
  # refuses to convert it. Without this the record escapes as an
@@ -173,7 +173,7 @@ async def _get_pending(queue: ApprovalQueue) -> JSONResponse:
173
173
  async def _post_approve(queue: ApprovalQueue, request: Request) -> JSONResponse:
174
174
  try:
175
175
  body = await request.json()
176
- except (ValueError, TypeError):
176
+ except ValueError, TypeError:
177
177
  return JSONResponse({"error": "invalid JSON body"}, status_code=400)
178
178
  if not isinstance(body, dict):
179
179
  return JSONResponse({"error": "body must be a JSON object"}, status_code=400)
@@ -201,7 +201,7 @@ async def _post_approve(queue: ApprovalQueue, request: Request) -> JSONResponse:
201
201
  async def _post_deny(queue: ApprovalQueue, request: Request) -> JSONResponse:
202
202
  try:
203
203
  body = await request.json()
204
- except (ValueError, TypeError):
204
+ except ValueError, TypeError:
205
205
  return JSONResponse({"error": "invalid JSON body"}, status_code=400)
206
206
  if not isinstance(body, dict):
207
207
  return JSONResponse({"error": "body must be a JSON object"}, status_code=400)
@@ -227,7 +227,7 @@ async def _get_decision_pin(data_dir: Path) -> JSONResponse:
227
227
  async def _post_decision_pin(data_dir: Path, request: Request) -> JSONResponse:
228
228
  try:
229
229
  body = await request.json()
230
- except (ValueError, TypeError):
230
+ except ValueError, TypeError:
231
231
  return JSONResponse({"error": "invalid JSON body"}, status_code=400)
232
232
  if not isinstance(body, dict):
233
233
  return JSONResponse({"error": "body must be a JSON object"}, status_code=400)
@@ -141,7 +141,7 @@ class Policy(BaseModel):
141
141
  schema_version: int = Field(default=POLICY_SCHEMA_VERSION, ge=1)
142
142
 
143
143
  @model_validator(mode="after")
144
- def _wait_must_be_less_than_ttl(self) -> "Policy":
144
+ def _wait_must_be_less_than_ttl(self) -> Policy:
145
145
  # If the middleware's wait window can outlast the entry's TTL
146
146
  # the queue's sweeper evicts the entry mid-wait and the
147
147
  # reissue-pending path fires on every call — burning one
@@ -118,7 +118,7 @@ def _migrate_policy_any_semantics_locked(data_dir: Path) -> bool:
118
118
  raw = json.loads(path.read_text(encoding="utf-8"))
119
119
  except FileNotFoundError:
120
120
  return False
121
- except (OSError, json.JSONDecodeError):
121
+ except OSError, json.JSONDecodeError:
122
122
  logger.warning("policy migration: cannot read %s; leaving as-is", path)
123
123
  return False
124
124
  if not isinstance(raw, dict) or raw.get("schema_version") is not None:
@@ -558,7 +558,7 @@ async def _save_advanced_settings(
558
558
 
559
559
  try:
560
560
  body = await request.json()
561
- except (ValueError, TypeError):
561
+ except ValueError, TypeError:
562
562
  return JSONResponse(
563
563
  create_error_response(
564
564
  ErrorCode.VALIDATION_INVALID_JSON, "Invalid JSON body"