ha-mcp-dev 9.0.0.dev3204__tar.gz → 9.0.0.dev3208__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 (814) hide show
  1. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/PKG-INFO +1 -1
  2. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/pyproject.toml +1 -1
  3. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/pyproject.toml.orig +1 -1
  4. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/client/websocket_client.py +5 -5
  5. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/config_meta.py +2 -3
  6. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/config_overrides.py +4 -4
  7. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/config_settings.py +2 -19
  8. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/server.py +1 -49
  9. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/server_tool_text.py +21 -18
  10. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/settings_ui/_handlers_advanced.py +9 -10
  11. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/settings_ui/_handlers_backups.py +1 -7
  12. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/settings_ui/_supervisor.py +7 -8
  13. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/settings_ui/locales/az.json +0 -6
  14. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/settings_ui/locales/cs.json +0 -6
  15. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/settings_ui/locales/de.json +0 -6
  16. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/settings_ui/locales/en.json +1 -7
  17. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/settings_ui/locales/eo.json +0 -6
  18. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/settings_ui/locales/es.json +0 -6
  19. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/settings_ui/locales/fr.json +0 -6
  20. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/settings_ui/locales/it.json +0 -6
  21. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/settings_ui/locales/ko.json +0 -6
  22. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/settings_ui/locales/nl.json +0 -6
  23. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/settings_ui/locales/pl.json +0 -6
  24. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/settings_ui/locales/ru.json +0 -6
  25. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/settings_ui/locales/sv.json +0 -6
  26. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/settings_ui/locales/tlh.json +0 -4
  27. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -6
  28. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -6
  29. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/settings_ui/settings_js/05_feature_flags.js +1 -1
  30. ha_mcp_dev-9.0.0.dev3208/src/ha_mcp/tools/backup.py +795 -0
  31. ha_mcp_dev-9.0.0.dev3208/src/ha_mcp/tools/backup_snapshot.py +871 -0
  32. ha_mcp_dev-9.0.0.dev3208/src/ha_mcp/tools/backup_snapshot_restore.py +395 -0
  33. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/hacs_registration.py +10 -3
  34. ha_mcp_dev-9.0.0.dev3204/src/ha_mcp/tools/backup.py +0 -2205
  35. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/LICENSE +0 -0
  36. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/README.md +0 -0
  37. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/__init__.py +0 -0
  38. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/__main__.py +0 -0
  39. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_pypi_marker +0 -0
  40. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_rich_compat.py +0 -0
  41. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/__init__.py +0 -0
  42. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
  43. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
  44. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
  45. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
  46. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
  47. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
  48. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
  49. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
  50. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
  51. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
  52. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
  53. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
  54. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
  55. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
  56. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
  57. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
  58. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
  59. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
  60. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
  61. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev_security.py +0 -0
  62. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
  63. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
  64. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
  65. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
  66. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
  67. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
  68. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
  69. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
  70. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
  71. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
  72. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
  73. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
  74. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
  75. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
  76. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
  77. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
  78. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
  79. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
  80. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
  81. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
  82. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
  83. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
  84. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
  85. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
  86. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
  87. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
  88. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
  89. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
  90. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
  91. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
  92. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
  93. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
  94. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
  95. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
  96. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
  97. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
  98. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
  99. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
  100. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
  101. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
  102. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
  103. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/client/mixins/skills.py +0 -0
  104. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
  105. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
  106. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
  107. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
  108. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
  109. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
  110. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
  111. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
  112. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
  113. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
  114. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
  115. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
  116. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
  117. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
  118. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
  119. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
  120. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
  121. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
  122. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
  123. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
  124. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
  125. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
  126. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
  127. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
  128. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
  129. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
  130. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
  131. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
  132. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
  133. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
  134. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
  135. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
  136. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
  137. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
  138. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
  139. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
  140. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
  141. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/jev_search.py +0 -0
  142. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
  143. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
  144. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
  145. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
  146. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
  147. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
  148. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
  149. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
  150. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
  151. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
  152. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
  153. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
  154. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
  155. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
  156. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
  157. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
  158. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
  159. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
  160. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
  161. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
  162. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
  163. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
  164. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
  165. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
  166. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
  167. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
  168. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
  169. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
  170. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
  171. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
  172. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
  173. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
  174. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
  175. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
  176. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
  177. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
  178. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
  179. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
  180. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
  181. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
  182. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
  183. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
  184. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
  185. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
  186. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
  187. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
  188. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
  189. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
  190. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
  191. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
  192. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
  193. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
  194. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
  195. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
  196. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
  197. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
  198. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
  199. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
  200. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
  201. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
  202. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
  203. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
  204. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
  205. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
  206. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
  207. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
  208. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
  209. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
  210. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
  211. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
  212. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
  213. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
  214. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/mixins/extensions.py +0 -0
  215. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
  216. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
  217. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
  218. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
  219. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
  220. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
  221. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
  222. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
  223. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
  224. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
  225. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
  226. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
  227. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
  228. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
  229. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
  230. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
  231. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
  232. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
  233. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
  234. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
  235. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
  236. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
  237. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
  238. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
  239. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
  240. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
  241. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
  242. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
  243. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
  244. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
  245. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
  246. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
  247. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
  248. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
  249. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
  250. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
  251. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
  252. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
  253. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
  254. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
  255. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
  256. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
  257. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
  258. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
  259. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
  260. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
  261. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
  262. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
  263. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/skills/__init__.py +0 -0
  264. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/skills/_constants.py +0 -0
  265. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/skills/_resources.py +0 -0
  266. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/skills/_snapshot.py +0 -0
  267. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/skills/_source.py +0 -0
  268. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/skills/client.py +0 -0
  269. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/skills/extension.py +0 -0
  270. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/skills/models.py +0 -0
  271. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
  272. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
  273. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
  274. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
  275. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
  276. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
  277. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
  278. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
  279. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
  280. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
  281. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
  282. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
  283. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
  284. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
  285. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
  286. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
  287. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
  288. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
  289. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
  290. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
  291. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
  292. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
  293. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
  294. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
  295. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
  296. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
  297. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
  298. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
  299. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
  300. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
  301. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
  302. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
  303. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
  304. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
  305. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
  306. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
  307. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
  308. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
  309. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
  310. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
  311. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
  312. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
  313. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
  314. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
  315. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
  316. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
  317. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
  318. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
  319. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
  320. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
  321. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
  322. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
  323. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
  324. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
  325. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
  326. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
  327. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
  328. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
  329. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
  330. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
  331. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
  332. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
  333. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
  334. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
  335. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
  336. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
  337. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
  338. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
  339. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
  340. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
  341. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
  342. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
  343. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
  344. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
  345. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
  346. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
  347. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
  348. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
  349. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
  350. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
  351. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
  352. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
  353. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
  354. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
  355. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
  356. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
  357. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
  358. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
  359. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
  360. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
  361. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
  362. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
  363. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
  364. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
  365. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
  366. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
  367. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
  368. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
  369. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
  370. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
  371. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
  372. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
  373. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
  374. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
  375. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
  376. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
  377. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
  378. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
  379. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
  380. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
  381. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
  382. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
  383. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
  384. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
  385. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
  386. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
  387. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
  388. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
  389. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
  390. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
  391. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
  392. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
  393. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
  394. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
  395. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
  396. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
  397. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
  398. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
  399. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
  400. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
  401. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
  402. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
  403. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
  404. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
  405. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
  406. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
  407. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
  408. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
  409. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
  410. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
  411. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
  412. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
  413. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
  414. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
  415. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
  416. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
  417. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
  418. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
  419. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
  420. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
  421. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
  422. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
  423. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
  424. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
  425. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
  426. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
  427. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
  428. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/shared/_request_clock.py +0 -0
  429. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
  430. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
  431. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
  432. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
  433. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
  434. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
  435. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
  436. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
  437. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
  438. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
  439. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
  440. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
  441. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
  442. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
  443. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
  444. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
  445. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
  446. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
  447. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
  448. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
  449. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
  450. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
  451. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
  452. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
  453. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
  454. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
  455. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
  456. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
  457. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
  458. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
  459. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
  460. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
  461. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
  462. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
  463. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
  464. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
  465. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/requirements.txt +0 -0
  466. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
  467. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
  468. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
  469. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
  470. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
  471. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
  472. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
  473. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
  474. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
  475. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
  476. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
  477. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
  478. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
  479. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/client.py +0 -0
  480. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
  481. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
  482. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
  483. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
  484. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
  485. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
  486. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
  487. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
  488. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
  489. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
  490. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
  491. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
  492. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
  493. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
  494. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
  495. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
  496. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
  497. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
  498. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
  499. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
  500. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
  501. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
  502. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/server.py +0 -0
  503. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
  504. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
  505. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
  506. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
  507. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
  508. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
  509. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
  510. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
  511. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
  512. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
  513. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
  514. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
  515. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
  516. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
  517. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
  518. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
  519. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
  520. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
  521. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_vendor/websockets/version.py +0 -0
  522. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/_version.py +0 -0
  523. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/app_discovery.py +0 -0
  524. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/auth/__init__.py +0 -0
  525. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/auth/consent_form.py +0 -0
  526. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/auth/iss_stamp.py +0 -0
  527. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/auth/oidc_compat.py +0 -0
  528. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/auth/provider.py +0 -0
  529. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/backup_dashboards.py +0 -0
  530. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/backup_diff.py +0 -0
  531. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/backup_entity_ids.py +0 -0
  532. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/backup_helper_target.py +0 -0
  533. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/backup_integrations.py +0 -0
  534. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/backup_manager.py +0 -0
  535. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/backup_tags.py +0 -0
  536. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/backup_zones.py +0 -0
  537. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/browser_landing.py +0 -0
  538. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/client/__init__.py +0 -0
  539. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/client/admin_routes.py +0 -0
  540. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/client/error_log_journald.py +0 -0
  541. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/client/models.py +0 -0
  542. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/client/rest_client.py +0 -0
  543. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/client/supervisor_client.py +0 -0
  544. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/client/websocket_listener.py +0 -0
  545. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/config.py +0 -0
  546. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/config_backup.py +0 -0
  547. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/config_registry.py +0 -0
  548. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
  549. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
  550. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
  551. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
  552. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
  553. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
  554. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/errors.py +0 -0
  555. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/ha_request_queue.py +0 -0
  556. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/hacs_auto_refresh.py +0 -0
  557. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/http_transport.py +0 -0
  558. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/image_info.py +0 -0
  559. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/llm_exposure.py +0 -0
  560. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/log_filters.py +0 -0
  561. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/policy/__init__.py +0 -0
  562. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/policy/approval_queue.py +0 -0
  563. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/policy/decision_pin.py +0 -0
  564. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/policy/decisions.py +0 -0
  565. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/policy/editing.py +0 -0
  566. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/policy/evaluator.py +0 -0
  567. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/policy/events.py +0 -0
  568. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/policy/handlers.py +0 -0
  569. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/policy/middleware.py +0 -0
  570. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/policy/model.py +0 -0
  571. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/policy/mrtr.py +0 -0
  572. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/policy/persistence.py +0 -0
  573. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/policy/server_channels.py +0 -0
  574. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/policy/value_sources.py +0 -0
  575. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/py.typed +0 -0
  576. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/read_only.py +0 -0
  577. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/redaction.py +0 -0
  578. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/renamed_tools.py +0 -0
  579. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  580. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  581. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
  582. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-actions.md +0 -0
  583. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
  584. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
  585. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  586. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  587. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  588. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  589. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  590. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  591. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  592. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
  593. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  594. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/triggers-and-conditions.md +0 -0
  595. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
  596. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/server_instructions.py +0 -0
  597. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/server_lifespan.py +0 -0
  598. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/settings_ui/__init__.py +0 -0
  599. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
  600. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/settings_ui/_handlers_oauth_callbacks.py +0 -0
  601. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
  602. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
  603. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
  604. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/settings_ui/_i18n.py +0 -0
  605. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
  606. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/settings_ui/_persistence.py +0 -0
  607. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/settings_ui/_theme.py +0 -0
  608. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
  609. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/settings_ui/locales/README.md +0 -0
  610. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/settings_ui/settings.css +0 -0
  611. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/settings_ui/settings.html +0 -0
  612. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/settings_ui/settings_js/01_i18n_state.js +0 -0
  613. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/settings_ui/settings_js/02_tools_restart.js +0 -0
  614. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/settings_ui/settings_js/03_render_save.js +0 -0
  615. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/settings_ui/settings_js/04_backups.js +0 -0
  616. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/settings_ui/settings_js/06_policy_cards.js +0 -0
  617. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/settings_ui/settings_js/07_policy_actions.js +0 -0
  618. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/settings_ui/settings_js/08_advanced.js +0 -0
  619. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/settings_ui/settings_js/09_prefs_visibility.js +0 -0
  620. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/settings_ui/settings_js/10_oauth_callbacks.js +0 -0
  621. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/smoke_test.py +0 -0
  622. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  623. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/strict_bps.py +0 -0
  624. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tool_dispatch.py +0 -0
  625. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/__init__.py +0 -0
  626. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/addon_connection_hints.py +0 -0
  627. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/area_messages.py +0 -0
  628. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/auto_backup.py +0 -0
  629. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/backup_access.py +0 -0
  630. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/backup_on_demand.py +0 -0
  631. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  632. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/best_practice_result.py +0 -0
  633. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/best_practice_variables.py +0 -0
  634. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/blueprint_sources.py +0 -0
  635. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
  636. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/blueprint_write.py +0 -0
  637. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/bug_report_config.py +0 -0
  638. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/bug_report_templates.py +0 -0
  639. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/bulk_selector.py +0 -0
  640. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/coercion.py +0 -0
  641. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/component_api.py +0 -0
  642. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/component_config_entries.py +0 -0
  643. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/component_config_reads.py +0 -0
  644. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
  645. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/component_devices.py +0 -0
  646. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/component_helper_collections.py +0 -0
  647. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/component_registries.py +0 -0
  648. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
  649. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/config_entry_backup.py +0 -0
  650. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/config_entry_flow.py +0 -0
  651. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
  652. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/config_entry_flow_introspect.py +0 -0
  653. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
  654. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
  655. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/config_entry_identity.py +0 -0
  656. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
  657. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
  658. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/config_file_visibility.py +0 -0
  659. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/config_helpers/__init__.py +0 -0
  660. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/config_helpers/core_payload.py +0 -0
  661. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/config_helpers/create.py +0 -0
  662. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/config_helpers/describe.py +0 -0
  663. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/config_helpers/flow.py +0 -0
  664. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/config_helpers/icon_route.py +0 -0
  665. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/config_helpers/listing.py +0 -0
  666. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/config_helpers/registry.py +0 -0
  667. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/config_helpers/schemas.py +0 -0
  668. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/config_helpers/typed_config.py +0 -0
  669. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/config_helpers/update.py +0 -0
  670. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/config_helpers/validation.py +0 -0
  671. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/config_subentry_restore.py +0 -0
  672. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/config_write_errors.py +0 -0
  673. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/config_write_helpers.py +0 -0
  674. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/core_contract.py +0 -0
  675. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/dashboard_card_describe.py +0 -0
  676. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
  677. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/dashboard_list_checks.py +0 -0
  678. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/dev_backup.py +0 -0
  679. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/device_control.py +0 -0
  680. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/device_enrichment.py +0 -0
  681. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/diagnostics_helpers.py +0 -0
  682. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/energy_preferences.py +0 -0
  683. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/entity_param_parsing.py +0 -0
  684. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/entity_registration.py +0 -0
  685. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/entity_removal.py +0 -0
  686. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/entity_update_fields.py +0 -0
  687. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/error_log_parsing.py +0 -0
  688. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/flow_helper_lookup.py +0 -0
  689. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/helper_flows.py +0 -0
  690. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/helpers.py +0 -0
  691. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/history_response.py +0 -0
  692. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/integration_entry_state.py +0 -0
  693. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
  694. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/log_common.py +0 -0
  695. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/log_sources.py +0 -0
  696. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/log_sources_fault.py +0 -0
  697. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/log_sources_logbook.py +0 -0
  698. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
  699. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/radio/__init__.py +0 -0
  700. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/radio/base.py +0 -0
  701. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/radio/matter.py +0 -0
  702. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/radio/thread.py +0 -0
  703. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/radio/zigbee.py +0 -0
  704. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/radio/zwave.py +0 -0
  705. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/radio/zwave_parameters.py +0 -0
  706. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/recorder_errors.py +0 -0
  707. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/reference_validator.py +0 -0
  708. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/registry.py +0 -0
  709. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
  710. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/response_helpers.py +0 -0
  711. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/scene_discovery.py +0 -0
  712. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/search/__init__.py +0 -0
  713. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/search/base.py +0 -0
  714. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/search/component.py +0 -0
  715. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/search/entities.py +0 -0
  716. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/search/legacy.py +0 -0
  717. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/search/modes.py +0 -0
  718. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/search/overview.py +0 -0
  719. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/search/response.py +0 -0
  720. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/search/state.py +0 -0
  721. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/server_version.py +0 -0
  722. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  723. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  724. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  725. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
  726. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  727. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  728. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
  729. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  730. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  731. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  732. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/statistics_calendar.py +0 -0
  733. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/statistics_helpers.py +0 -0
  734. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/statistics_resets.py +0 -0
  735. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/system_restart.py +0 -0
  736. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/tool_hints.py +0 -0
  737. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
  738. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/tools_addons.py +0 -0
  739. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/tools_areas.py +0 -0
  740. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
  741. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  742. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  743. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/tools_calendar.py +0 -0
  744. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/tools_camera.py +0 -0
  745. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/tools_categories.py +0 -0
  746. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/tools_code.py +0 -0
  747. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/tools_config_automations.py +0 -0
  748. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
  749. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  750. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
  751. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
  752. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
  753. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/tools_dev.py +0 -0
  754. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/tools_energy.py +0 -0
  755. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/tools_entities.py +0 -0
  756. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  757. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/tools_groups.py +0 -0
  758. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/tools_hacs.py +0 -0
  759. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/tools_history.py +0 -0
  760. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/tools_integrations.py +0 -0
  761. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/tools_labels.py +0 -0
  762. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/tools_logs.py +0 -0
  763. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/tools_radio.py +0 -0
  764. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/tools_registry.py +0 -0
  765. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/tools_resources.py +0 -0
  766. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/tools_search.py +0 -0
  767. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/tools_security_policy.py +0 -0
  768. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/tools_service.py +0 -0
  769. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/tools_services.py +0 -0
  770. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/tools_system.py +0 -0
  771. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/tools_themes.py +0 -0
  772. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/tools_todo.py +0 -0
  773. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/tools_traces.py +0 -0
  774. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/tools_updates.py +0 -0
  775. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/tools_utility.py +0 -0
  776. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  777. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  778. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
  779. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/tools_zones.py +0 -0
  780. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/util_helpers.py +0 -0
  781. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/validation_middleware.py +0 -0
  782. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/tools/ws_waiters.py +0 -0
  783. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/transforms/__init__.py +0 -0
  784. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/transforms/categorized_search.py +0 -0
  785. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/transforms/compact_params.py +0 -0
  786. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/transforms/component_helpers.py +0 -0
  787. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/transforms/component_search.py +0 -0
  788. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  789. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/transforms/write_tool_note.py +0 -0
  790. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/transport_security.py +0 -0
  791. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/update_check.py +0 -0
  792. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/utils/__init__.py +0 -0
  793. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/utils/config_hash.py +0 -0
  794. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/utils/config_write_lock.py +0 -0
  795. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/utils/dashboard_patch.py +0 -0
  796. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/utils/data_paths.py +0 -0
  797. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
  798. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/utils/domain_handlers.py +0 -0
  799. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/utils/entity_membership.py +0 -0
  800. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  801. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  802. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/utils/mcp_client_host.py +0 -0
  803. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/utils/operation_manager.py +0 -0
  804. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/utils/python_sandbox.py +0 -0
  805. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/utils/registry_update_lock.py +0 -0
  806. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/utils/skill_loader.py +0 -0
  807. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/utils/usage_logger.py +0 -0
  808. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/visibility/__init__.py +0 -0
  809. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/visibility/config_files.py +0 -0
  810. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/visibility/enforcement.py +0 -0
  811. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/visibility/identifier_aliases.py +0 -0
  812. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/visibility/model.py +0 -0
  813. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/visibility/persistence.py +0 -0
  814. {ha_mcp_dev-9.0.0.dev3204 → ha_mcp_dev-9.0.0.dev3208}/src/ha_mcp/visibility/resolver.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ha-mcp-dev
3
- Version: 9.0.0.dev3204
3
+ Version: 9.0.0.dev3208
4
4
  Summary: Home Assistant MCP Server - Complete control of Home Assistant through MCP
5
5
  Keywords: mcp,home-assistant,ai,automation,smart-home
6
6
  Author: Julien
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "9.0.0.dev3204"
7
+ version = "9.0.0.dev3208"
8
8
  description = "Home Assistant MCP Server - Complete control of Home Assistant through MCP"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13,<3.15"
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "9.0.0.dev3204"
7
+ version = "9.0.0.dev3208"
8
8
  description = "Home Assistant MCP Server - Complete control of Home Assistant through MCP"
9
9
  readme = "README.md"
10
10
  # Upper bound widened to <3.15 so the package installs on Home Assistant's
@@ -282,12 +282,12 @@ class WebSocketConnectionState:
282
282
  future.set_exception(HomeAssistantConnectionError(message))
283
283
  self._event_responses.clear()
284
284
 
285
- # Drop any subscription queues — readers wake on the close signal
286
- # we push, then a ``QueueShutDown`` (3.13) tells them the source
287
- # is gone. Using ``shutdown`` rather than just clearing the dict
288
- # so blocked ``queue.get()`` awaiters unblock instead of hanging.
285
+ # Drop any subscription queues. ``shutdown`` rather than just clearing
286
+ # the dict, so blocked ``queue.get()`` awaiters unblock instead of
287
+ # hanging; not ``immediate``, so a reader still gets the events that
288
+ # arrived before the close, then ``QueueShutDown`` (3.13).
289
289
  for queue in self._subscription_queues.values():
290
- queue.shutdown(immediate=True)
290
+ queue.shutdown()
291
291
  self._subscription_queues.clear()
292
292
  # Subscriptions die with the socket, and ids restart on the next one.
293
293
  self._abandoned_subscriptions.clear()
@@ -50,14 +50,13 @@ class AppOption:
50
50
  ``start.py`` exports the option to the setting's env var. An option that
51
51
  only some flavors declare is exported only when ``options.json`` has the
52
52
  key: an exported value marks the setting as app-managed in the web UI,
53
- and Supervisor rejects a save of a key the flavor does not declare.
53
+ and Supervisor drops a key the flavor does not declare (with only a log
54
+ warning), so a save of it would silently not persist.
54
55
  """
55
56
 
56
57
  flavors: tuple[Literal["stable", "dev"], ...] = ("stable", "dev")
57
58
  # The dev flavor's default when it differs from the field default.
58
59
  dev_default: bool | None = None
59
- # Supervisor requires the option; every other option is optional ("?").
60
- required: bool = False
61
60
 
62
61
 
63
62
  @dataclass(frozen=True)
@@ -484,10 +484,10 @@ def _apply_advanced_overrides(settings: "Settings") -> None:
484
484
  registry) are NEVER applied — chicken-and-egg safeguard for
485
485
  connection settings.
486
486
 
487
- Addon-mode behavior: two advanced fields are in addon ``config.yaml``
488
- schemas — ``backup_hint`` and ``verify_ssl`` (both stable and dev).
489
- For those, ``start.py`` exports the env var on every boot and the
490
- env-var-wins check below correctly skips them. All other advanced
487
+ Addon-mode behavior: the advanced fields that are also app options
488
+ (``ADDON_SYNCED_ADVANCED_FIELDS``) are in the addon ``config.yaml``
489
+ schemas. For those, ``start.py`` exports the env var on every boot and the
490
+ env-var-wins check in ``_apply_one_advanced_override`` skips them. All other advanced
491
491
  fields (code_mode_* sub-numerics, mcp_server_*, log_level, debug,
492
492
  enabled_tool_modules, fuzzy_threshold, etc.) are NOT in any addon
493
493
  schema; the override file is the authoritative source and applies
@@ -244,17 +244,6 @@ class Settings(BaseSettings):
244
244
  ),
245
245
  ] = Field(0, alias="HA_TOOL_CONCURRENCY")
246
246
 
247
- # Backup tool configuration. The app requires this option.
248
- backup_hint: Annotated[
249
- str,
250
- Setting(
251
- surface="advanced",
252
- section="operations",
253
- app=AppOption(required=True),
254
- choices=("strong", "normal", "weak", "auto"),
255
- ),
256
- ] = Field("normal", alias="BACKUP_HINT")
257
-
258
247
  # WebSocket configuration (essential for async operations)
259
248
  enable_websocket: Annotated[
260
249
  bool,
@@ -530,7 +519,7 @@ class Settings(BaseSettings):
530
519
  # generic Server Settings feature list, while /api/settings/features
531
520
  # still serves and persists it for the Policies-tab toggle. It is an app
532
521
  # option because that toggle routes its save through Supervisor in
533
- # add-on mode, which rejects any option the schema does not declare.
522
+ # add-on mode, which drops any option the schema does not declare.
534
523
  enable_security_policy_tool: Annotated[
535
524
  bool, Setting(surface="feature", app=_ALL_FLAVORS)
536
525
  ] = Field(False, alias="ENABLE_SECURITY_POLICY_TOOL")
@@ -754,7 +743,7 @@ class Settings(BaseSettings):
754
743
  # snapshots before deleting old ones, but it cannot forge a backup's
755
744
  # HA-stamped creation date. 0 disables the age floor (still gated by
756
745
  # enable_snapshot_delete + the newest-snapshot / automatic-backup
757
- # guards enforced in tools/backup.py).
746
+ # guards enforced in tools/backup_snapshot.py).
758
747
  snapshot_delete_min_age_days: Annotated[
759
748
  int, Setting(surface="backup", app=_ALL_FLAVORS, range=(0, 365))
760
749
  ] = Field(7, alias="SNAPSHOT_DELETE_MIN_AGE_DAYS")
@@ -886,12 +875,6 @@ class Settings(BaseSettings):
886
875
  """Accept a log level in any case."""
887
876
  return _one_of(cls, "log_level", v.upper())
888
877
 
889
- @field_validator("backup_hint")
890
- @classmethod
891
- def validate_backup_hint(cls, v: str) -> str:
892
- """Accept a backup hint in any case."""
893
- return _one_of(cls, "backup_hint", v.lower())
894
-
895
878
  model_config = SettingsConfigDict(
896
879
  # Absolute, and the same file load_dotenv already resolved above. A
897
880
  # relative ".env" here would be a second, independent read that
@@ -396,50 +396,6 @@ class HomeAssistantSmartMCPServer:
396
396
  # unnecessarily trim context for other clients.
397
397
  _SEARCH_DESCRIPTION_OVERRIDES: ClassVar[dict[str, str]] = {}
398
398
 
399
- @staticmethod
400
- def _lite_docstring_tokens() -> dict[str, str]:
401
- """Operator-tuned values interpolated into the lite descriptions.
402
-
403
- ``_LITE_DOCSTRINGS`` is a static ``ClassVar``, but not every full
404
- description it replaces is static: ``ha_manage_backup``'s is an
405
- f-string built in ``register_backup_tools()`` that interpolates
406
- ``_get_backup_hint_text()`` from ``BACKUP_HINT``
407
- (strong/normal/weak). Hard-coding one wording into the lite text
408
- would make that setting a silent no-op whenever lite mode is on —
409
- the add-on UI would confirm a Backup-hint change that changed
410
- nothing. So the lite values carry ``{token}`` placeholders and are
411
- resolved here, reading the same env var at the same point in
412
- startup the full description does.
413
- """
414
- # Local import: same lazy-seam pattern as backup_manager's
415
- # _normalize_config_for_roundtrip import. It does NOT keep the tools
416
- # package off the module-load path — server.py already imports
417
- # .tools.helpers at module scope — what it avoids is pulling in
418
- # tools.backup, which is the actual reason to keep it local.
419
- from .tools.backup import _get_backup_hint_text
420
-
421
- return {"backup_hint_text": _get_backup_hint_text()}
422
-
423
- @classmethod
424
- def _resolve_lite_docstrings(cls) -> dict[str, str]:
425
- """Return ``_LITE_DOCSTRINGS`` with its placeholders filled in.
426
-
427
- Uses ``str.replace`` rather than ``str.format`` so the descriptions
428
- stay free to contain literal braces (Jinja examples, JSON) without
429
- a stray ``{`` turning into a ``KeyError`` at startup. An unknown
430
- placeholder is left verbatim rather than raising —
431
- ``test_every_placeholder_in_the_map_is_resolvable`` is what catches a
432
- typo'd token, at test time instead of in a user's tool catalog.
433
- """
434
- tokens = cls._lite_docstring_tokens()
435
- resolved: dict[str, str] = {}
436
- for name, lite in cls._LITE_DOCSTRINGS.items():
437
- filled = lite
438
- for token, value in tokens.items():
439
- filled = filled.replace("{" + token + "}", value)
440
- resolved[name] = filled
441
- return resolved
442
-
443
399
  def _apply_lite_docstrings(self) -> None:
444
400
  """Swap heavy tool descriptions for shorter variants if enabled.
445
401
 
@@ -450,10 +406,6 @@ class HomeAssistantSmartMCPServer:
450
406
  ``ha_get_skill_guide``. Tools not in the
451
407
  mapping pass through unchanged.
452
408
 
453
- Descriptions are resolved through ``_resolve_lite_docstrings`` so
454
- operator-tuned text (``BACKUP_HINT``) survives the swap instead of
455
- being pinned to whatever wording the static map happened to carry.
456
-
457
409
  Emits a startup WARNING when enabled so non-addon users (Docker,
458
410
  uvx, pip) see the trade-off in their logs — the addon UI surfaces
459
411
  the same warning via the toggle description. A second WARNING is
@@ -488,7 +440,7 @@ class HomeAssistantSmartMCPServer:
488
440
 
489
441
  try:
490
442
  self.mcp.add_transform(
491
- LiteDocstringsTransform(replacements=self._resolve_lite_docstrings())
443
+ LiteDocstringsTransform(replacements=self._LITE_DOCSTRINGS)
492
444
  )
493
445
  except Exception:
494
446
  logger.exception("Failed to apply LiteDocstringsTransform")
@@ -388,17 +388,14 @@ LITE_DOCSTRINGS: dict[str, str] = {
388
388
  "entity_id over device_id, impact analysis before renaming — see "
389
389
  "ha_get_skill_guide."
390
390
  ),
391
- # ha_manage_backup: the full description is 4571 dedented chars at
392
- # BACKUP_HINT=normal (4672 strong / 4598 weak) and the lite value is
393
- # a little over a quarter of that. No exact pair is quoted here on
394
- # purpose — three successive edits left a stale figure in this
395
- # comment, so the ratio is pinned by
396
- # test_backup_lite_description_stays_substantially_smaller instead,
397
- # which measures both sides at test time.
391
+ # ha_manage_backup: the lite value is a fraction of the full
392
+ # description. test_backup_lite_description_stays_substantially_smaller
393
+ # bounds it (under 45% of the full text, over 900 chars) and measures
394
+ # both sides at test time, so no figure is quoted here.
398
395
  #
399
396
  # It was the largest full description in the GATEWAY catalog this was
400
- # measured against, not in the repo: ha_get_system_health (5811) is
401
- # larger and unmapped.
397
+ # measured against, not in the repo: ha_get_system_health is larger
398
+ # and unmapped.
402
399
  # The reduction is smaller than pure compression would give because
403
400
  # the safety content below is kept inline. The routing matrix STAYS —
404
401
  # the `action` parameter's own Field description says "Valid (scope,
@@ -418,19 +415,25 @@ LITE_DOCSTRINGS: dict[str, str] = {
418
415
  # destructiveHint is set on this tool, so the lite text keeps every
419
416
  # irreversibility marker inline rather than deferring it: the
420
417
  # restart, the confirm, the human-only enable_snapshot_delete, and
421
- # each individual delete guard. It also keeps the two diagnostics
422
- # that have no fallback anywhere else — the enable_auto_backup
423
- # empty-list ambiguity, and the {backup_hint_text} timing sentence
424
- # (resolved per-instance; see _lite_docstring_tokens).
418
+ # each individual delete guard. It also keeps the diagnostics that
419
+ # have no fallback anywhere else: a slow `create` is not a hang
420
+ # (retrying starts a second backup), and the enable_auto_backup
421
+ # empty-list ambiguity.
425
422
  "ha_manage_backup": (
426
423
  "Manage Home Assistant backups: full HA snapshots "
427
424
  "(`scope='snapshot'`) and per-entity auto-backups of agent edits "
428
425
  "(`scope='edits'`). Pick the scope first — the wrong one routes "
429
426
  "through the wrong code path.\n\n"
430
- "`scope='snapshot'` actions: `create` (slow on a large "
427
+ "`scope='snapshot'` actions: `create` (a full backup with Home "
428
+ "Assistant's automatic-backup settings, counted by their "
429
+ "retention, or on the default location without automatic-backup "
430
+ "locations, holding the apps those settings select; any "
431
+ "`include_*` makes a custom backup of just those "
432
+ "parts instead; slow on a large "
431
433
  "instance — progress heartbeats are sent while waiting, so a "
432
434
  "long wait is not a hang; retrying starts a SECOND backup), "
433
- "`list`, `restore` (**restarts HA**), `delete` (needs "
435
+ "`list`, `restore` (**restarts HA**; `safety_backup=True`, off "
436
+ "by default, first backs up what the restore replaces), `delete` (needs "
434
437
  "`confirm=True`; disabled until a human sets "
435
438
  "`enable_snapshot_delete` — an agent cannot enable it. Even then "
436
439
  "a delete is refused for scheduled/automatic backups, for "
@@ -439,7 +442,7 @@ LITE_DOCSTRINGS: dict[str, str] = {
439
442
  "remaining).\n\n"
440
443
  "`scope='edits'` actions: `create` (needs `domain` + "
441
444
  "`entity_id`), `list`, `view`, `diff`, `restore` (takes a fresh "
442
- "safety snapshot first; no HA restart), `delete`. Automatic "
445
+ "per-entity backup first; no HA restart), `delete`. Automatic "
443
446
  "capture on write is gated by `enable_auto_backup`, so an empty "
444
447
  '`list` means "nothing saved" OR "the toggle is off" — check it '
445
448
  "before concluding there is nothing to restore. Either way "
@@ -447,8 +450,8 @@ LITE_DOCSTRINGS: dict[str, str] = {
447
450
  "the request is explicit.\n\n"
448
451
  "Use `edits` to undo a recent agent edit to an "
449
452
  "automation/script/scene/dashboard/helper; use `snapshot` for "
450
- "system-wide recovery and before irreversible operations. "
451
- "{backup_hint_text}\n\n"
453
+ "system-wide recovery. A snapshot backup is the user's call: ask "
454
+ "before making one, and make it only when they say so.\n\n"
452
455
  "For which recovery path fits which failure, what an archive "
453
456
  "actually contains, and the encryption key a restore needs, see "
454
457
  "ha_get_skill_guide (`references/backups.md`)."
@@ -3,9 +3,8 @@
3
3
  Factory returning the ``get_advanced_settings`` / ``save_advanced_settings``
4
4
  handlers over the ``ADVANCED_SETTINGS_FIELDS`` registry. Most advanced
5
5
  fields write to the shared ``feature_flags.json`` override file;
6
- ``ADDON_SYNCED_ADVANCED_FIELDS`` (``backup_hint``, ``ha_tool_concurrency``,
7
- ``verify_ssl``) route
8
- through the Supervisor add-on options in add-on mode instead.
6
+ ``ADDON_SYNCED_ADVANCED_FIELDS`` (the advanced fields that are also app
7
+ options) route through the Supervisor add-on options in add-on mode instead.
9
8
 
10
9
  Handlers are module-level (own C901 budget); ``build_advanced_handlers``
11
10
  binds ``server`` into request-only wrappers.
@@ -136,8 +135,8 @@ async def _get_advanced_settings(
136
135
  Mirrors ``_get_feature_flags`` / ``_get_backup_config`` but for the
137
136
  ``ADVANCED_SETTINGS_FIELDS`` registry. Most advanced fields write to
138
137
  ``feature_flags.json`` via the shared override file in either deployment
139
- mode. ``ADDON_SYNCED_ADVANCED_FIELDS`` (``backup_hint``,
140
- ``ha_tool_concurrency``, ``verify_ssl``) are an exception: in addon mode
138
+ mode. ``ADDON_SYNCED_ADVANCED_FIELDS`` (the advanced fields that are
139
+ also app options) are an exception: in addon mode
141
140
  they have ``origin="addon"`` (editable) and saves route through Supervisor
142
141
  so the add-on Configuration tab and the web UI share state.
143
142
  """
@@ -332,7 +331,7 @@ def _validate_one_advanced_field(
332
331
  status_code=409,
333
332
  ),
334
333
  )
335
- # Addon-synced fields (backup_hint, ha_tool_concurrency, verify_ssl) are editable in
334
+ # Addon-synced fields (``ADDON_SYNCED_ADVANCED_FIELDS``) are editable in
336
335
  # addon mode even though their env vars are set — start.py rewrites them
337
336
  # from /data/options.json on every boot, so route the write through
338
337
  # Supervisor instead of the override file.
@@ -404,8 +403,8 @@ async def _save_advanced_addon(
404
403
  f"into separate POSTs ({sorted(file_only)})."
405
404
  ),
406
405
  suggestions=[
407
- "Submit addon-synced fields (e.g. backup_hint, "
408
- "verify_ssl) and override-file fields in separate "
406
+ "Submit addon-synced fields (e.g. verify_ssl, "
407
+ "ha_tool_concurrency) and override-file fields in separate "
409
408
  "save requests.",
410
409
  ],
411
410
  ),
@@ -530,8 +529,8 @@ async def _save_advanced_settings(
530
529
  ) -> JSONResponse:
531
530
  """Persist UI-edited advanced settings.
532
531
 
533
- Addon-synced fields (``backup_hint``, ``ha_tool_concurrency``,
534
- ``verify_ssl``) in add-on mode route through Supervisor; everything else
532
+ Addon-synced fields (``ADDON_SYNCED_ADVANCED_FIELDS``) in add-on mode
533
+ route through Supervisor; everything else
535
534
  atomically merges into the shared ``feature_flags.json`` override file.
536
535
  Either sink responds with ``restart_required=True`` (most advanced fields
537
536
  gate one-time startup paths).
@@ -476,7 +476,7 @@ async def _save_backup_config_addon(
476
476
  """Add-on-mode branch of ``_save_backup_config``: merge ``clean`` into the
477
477
  Supervisor add-on options (full-replacement) and return.
478
478
 
479
- ``start.py`` re-derives env vars from ``config.yaml`` on the next add-on
479
+ ``start.py`` re-derives env vars from ``/data/options.json`` on the next add-on
480
480
  boot, but the actual restart is fired by the user's global Restart Add-on
481
481
  button — not here — so ``restart_required=True`` and no auto-restart.
482
482
  """
@@ -489,12 +489,6 @@ async def _save_backup_config_addon(
489
489
  code=ErrorCode.INTERNAL_ERROR,
490
490
  status=500,
491
491
  )
492
- # Merge ``clean`` into the *full* current options before posting.
493
- # Supervisor validates against the addon schema and rejects any body
494
- # missing a required key (notably ``backup_hint`` on the production /
495
- # dev manifests). A previous version shipped just the auto-backup
496
- # fields, producing ``addon_configuration_invalid_error: Missing option
497
- # 'backup_hint' in root`` from supervisor and a confusing 400 in the UI.
498
492
  ok, sup_err = await _supervisor._supervisor_merge_and_post_options(
499
493
  server.settings.verify_ssl, clean
500
494
  )
@@ -4,9 +4,9 @@ Groups the two Supervisor concerns the settings handlers depend on:
4
4
 
5
5
  - **Options merge/post** (``_supervisor_fetch_current_options`` /
6
6
  ``_supervisor_merge_and_post_options``) — Supervisor's
7
- ``/addons/self/options`` POST is a *full* replacement validated against
8
- the addon schema, so a partial edit must be merged into the current
9
- options before posting.
7
+ ``/addons/self/options`` POST replaces the stored options in full (keys
8
+ left out fall back to their defaults), so a partial edit must be merged
9
+ into the current options before posting.
10
10
  - **Self-restart** (``_schedule_supervisor_self_restart``) — a
11
11
  fire-and-forget ``/addons/self/restart`` POST scheduled after the
12
12
  response has flushed, so the browser isn't served a 5xx by the ingress
@@ -74,9 +74,9 @@ async def _supervisor_fetch_current_options(
74
74
  ) -> tuple[dict[str, Any], _SupervisorOptionsError | None]:
75
75
  """GET ``/addons/self/info`` and return the current options dict.
76
76
 
77
- Supervisor's ``/addons/self/options`` POST is a *full* replacement
78
- validated against the addon schema — every required key must be
79
- present in the body. We can't ship a partial PATCH of just the
77
+ Supervisor's ``/addons/self/options`` POST replaces the stored options
78
+ in full: any key left out falls back to its ``config.yaml`` default.
79
+ We can't ship a partial PATCH of just the
80
80
  fields the user changed, so callers must merge their changes into
81
81
  the full current options before posting. Mirrors the pattern in
82
82
  ``homeassistant-addon/start.py::maybe_persist_secret_path`` which
@@ -146,8 +146,7 @@ async def _supervisor_merge_and_post_options(
146
146
  Necessary because supervisor's POST is full-replacement (see
147
147
  :func:`_supervisor_fetch_current_options`). Without this merge, a
148
148
  POST that only includes a handful of fields the user edited
149
- drops every other key (including required ones like ``backup_hint``)
150
- and supervisor rejects with a 400 ``addon_configuration_invalid_error``.
149
+ drops every other key, resetting those options to their defaults.
151
150
 
152
151
  Returns ``(success, error)`` where ``error`` is a
153
152
  :class:`_SupervisorOptionsError`. Transport failures (token missing,
@@ -474,12 +474,6 @@
474
474
  "advanced.enable_history_query_guardrails.help": "Obyekt sayı və vaxt aralığı üzrə ehtiyatlı limitləri aşan qeydiyyatçı sorğularını rədd edir. Standart olaraq deaktivdir.",
475
475
  "advanced.ha_tool_concurrency.label": "Home Assistant alətlərinin paralel icrası",
476
476
  "advanced.ha_tool_concurrency.help": "Bütün sessiyalar üzrə xarici Home Assistant alət çağırışlarında əlavə məhdudiyyət. Daxili REST, WebSocket və hər alət üzrə paylanma eynizmətliliyi (concurrency) dəyişməz qalır. 0 məhdudiyyətsiz davranışı qoruyur. Tutum üçün gözləyən çağırış 60 saniyədən sonra uğursuz olur.",
477
- "advanced.backup_hint.label": "Ehtiyat nüsxə ipucu səviyyəsi",
478
- "advanced.backup_hint.help": "Riskli dəyişikliklərdən əvvəl süni intellekt köməkçilərinə tam Home Assistant ehtiyat nüsxəsini təklif etməyin nə qədər güclü şəkildə bildirildiyi. O, yalnız bu ipucunu dəyişdirir; avtomatik redaktə ehtiyat nüsxələrinin öz parametrləri var.",
479
- "advanced.backup_hint.choices.strong": "Güclü",
480
- "advanced.backup_hint.choices.normal": "Normal",
481
- "advanced.backup_hint.choices.weak": "Zəif",
482
- "advanced.backup_hint.choices.auto": "Avtomatik",
483
477
  "advanced.dashboard_screenshot_engine_url.label": "İdarə panelinin ekran görüntüsü mühərrikinin URL-i",
484
478
  "advanced.dashboard_screenshot_engine_url.help": "Ekran görüntüsü mühərrikinin əsas URL-i. Supervisor vasitəsilə avtomatik aşkarlama üçün boş saxlayın. Dərhal tətbiq edilir.",
485
479
  "advanced.enable_websocket.label": "WebSocket-i aktivləşdir",
@@ -474,12 +474,6 @@
474
474
  "advanced.enable_history_query_guardrails.help": "Zamítat dotazy do záznamu (recorder), které překračují konzervativní limity entit a časového rozsahu. Ve výchozím nastavení vypnuto.",
475
475
  "advanced.ha_tool_concurrency.label": "Souběžnost nástrojů Home Assistant",
476
476
  "advanced.ha_tool_concurrency.help": "Volitelný limit pro vnější volání nástrojů Home Assistant napříč všemi relacemi. Vnitřní souběh pro REST, WebSocket a rozbočení pro jednotlivé nástroje zůstává nezměněn. 0 zachovává neomezené chování. Volání čekající na kapacitu selže po 60 sekundách.",
477
- "advanced.backup_hint.label": "Úroveň nápovědy zálohování",
478
- "advanced.backup_hint.help": "Jak důrazně jsou asistenti AI vyzýváni k doporučení úplné zálohy Home Assistant před rizikovými změnami. Mění pouze tuto nápovědu; automatické zálohy úprav mají své vlastní nastavení.",
479
- "advanced.backup_hint.choices.strong": "Silná",
480
- "advanced.backup_hint.choices.normal": "Normální",
481
- "advanced.backup_hint.choices.weak": "Slabá",
482
- "advanced.backup_hint.choices.auto": "Automatická",
483
477
  "advanced.dashboard_screenshot_engine_url.label": "URL adresa enginu pro snímky obrazovky panelu",
484
478
  "advanced.dashboard_screenshot_engine_url.help": "Základní URL enginu pro snímky obrazovky. Ponechte prázdné pro automatické zjišťování Supervisor. Platí okamžitě.",
485
479
  "advanced.enable_websocket.label": "Povolit WebSocket",
@@ -474,12 +474,6 @@
474
474
  "advanced.enable_history_query_guardrails.help": "Recorder-Abfragen ablehnen, die konservative Entitäts- und Zeitbereichsbudgets überschreiten. Standardmäßig deaktiviert.",
475
475
  "advanced.ha_tool_concurrency.label": "Home-Assistant-Tool-Gleichzeitigkeit",
476
476
  "advanced.ha_tool_concurrency.help": "Optionale Begrenzung für äußere Home Assistant-Tool-Aufrufe über alle Sitzungen hinweg. Interne REST-, WebSocket- und tool-spezifische Fan-Out-Gleichzeitigkeit bleibt unverändert. 0 belässt das Verhalten unbegrenzt. Ein Aufruf, der auf Kapazität wartet, schlägt nach 60 Sekunden fehl.",
477
- "advanced.backup_hint.label": "Backup-Hinweisstufe",
478
- "advanced.backup_hint.help": "Wie nachdrücklich KI-Assistenten angewiesen werden, vor riskanten Änderungen ein vollständiges Home Assistant-Backup vorzuschlagen. Ändert nur diesen Hinweis; automatische Bearbeitungs-Backups haben ihre eigene Einstellung.",
479
- "advanced.backup_hint.choices.strong": "Stark",
480
- "advanced.backup_hint.choices.normal": "Normal",
481
- "advanced.backup_hint.choices.weak": "Schwach",
482
- "advanced.backup_hint.choices.auto": "Automatisch",
483
477
  "advanced.dashboard_screenshot_engine_url.label": "Dashboard-Screenshot-Engine-URL",
484
478
  "advanced.dashboard_screenshot_engine_url.help": "Basis-URL der Screenshot-Engine. Lasse leer für Supervisor-Auto-Discovery. Wirkt sofort.",
485
479
  "advanced.enable_websocket.label": "WebSocket aktivieren",
@@ -160,7 +160,7 @@
160
160
  "features.enable_code_mode.label": "Enable custom tool sandbox (beta)",
161
161
  "features.enable_code_mode.help": "Beta feature. Enables the ha_manage_custom_tool tool, which lets AI assistants create, run, save, and delete custom Python code in a secure sandbox when no built-in tool can handle the request. Code runs in an isolated interpreter with no filesystem or arbitrary network access. Sandbox code can hit the HA REST API (api_get/api_post), send WebSocket commands (ws_send), call existing MCP tools (call_tool), or remove a saved tool (delete_saved_tool). Saved tools persist to /data/saved_tools.json by default so they survive app (add-on) restarts, and are visible to any client that can connect. See docs/beta.md for known limitations. Requires restart to take effect. REQUIRES the master \"Enable beta features\" toggle above (and in the web UI) to be on — otherwise this sub-flag is ignored at runtime regardless of its value here.",
162
162
  "features.enable_lite_docstrings.label": "Enable lite tool docstrings (beta)",
163
- "features.enable_lite_docstrings.help": "Beta feature. Replaces the docstrings on 15 heavy ha-mcp tools (ha_config_get_automation, ha_config_set_automation, ha_config_get_script, ha_config_set_script, ha_config_get_scene, ha_config_set_scene, ha_config_list_helpers, ha_config_set_helper, ha_config_get_dashboard, ha_config_set_dashboard, ha_call_service, ha_config_set_yaml, ha_search, ha_manage_backup, ha_report_issue) with shorter variants that defer schema and example detail to the ha_get_skill_guide tool (or its skill:// resource). One exception: ha_report_issue defers to the instructions field of its own response instead. Tuning the Backup-hint setting still applies in lite mode. WARNING: this reduces idle token usage, but may degrade LLM performance — the trimmed descriptions rely on the LLM actually calling the skill tool or reading the skill resource for detail, which is not guaranteed (some models will skip the extra tool call and end up with less guidance than they had before). Best paired with a client that supports MCP resources or with enable_tool_search. Requires restart to take effect. REQUIRES the master \"Enable beta features\" toggle above (and in the web UI) to be on — otherwise this sub-flag is ignored at runtime regardless of its value here.",
163
+ "features.enable_lite_docstrings.help": "Beta feature. Replaces the docstrings on 15 heavy ha-mcp tools (ha_config_get_automation, ha_config_set_automation, ha_config_get_script, ha_config_set_script, ha_config_get_scene, ha_config_set_scene, ha_config_list_helpers, ha_config_set_helper, ha_config_get_dashboard, ha_config_set_dashboard, ha_call_service, ha_config_set_yaml, ha_search, ha_manage_backup, ha_report_issue) with shorter variants that defer schema and example detail to the ha_get_skill_guide tool (or its skill:// resource). One exception: ha_report_issue defers to the instructions field of its own response instead. WARNING: this reduces idle token usage, but may degrade LLM performance — the trimmed descriptions rely on the LLM actually calling the skill tool or reading the skill resource for detail, which is not guaranteed (some models will skip the extra tool call and end up with less guidance than they had before). Best paired with a client that supports MCP resources or with enable_tool_search. Requires restart to take effect. REQUIRES the master \"Enable beta features\" toggle above (and in the web UI) to be on — otherwise this sub-flag is ignored at runtime regardless of its value here.",
164
164
  "features.enable_dashboard_screenshot.label": "Enable dashboard screenshot mode (beta)",
165
165
  "features.enable_dashboard_screenshot.help": "Beta feature — disabled by default. Adds the ha_get_dashboard_screenshot tool plus include_screenshot / return_screenshot options on the dashboard get/set tools, so AI assistants can inspect one or more responsive Lovelace images (e.g. to verify a dashboard they just created). Supports stable named views, mobile/tablet/desktop batches, and PNG/JPEG/WebP/BMP output. Rendering runs in a separate, opt-in engine — balloob's \"Puppet\" App (add-on), headless Chromium — which you install once (add balloob's repository to the App store, then install \"Puppet\") and give a long-lived access token; on Docker/Container deployments you run that engine as a sidecar and set HAMCP_DASHBOARD_SCREENSHOT_ENGINE_URL. Nothing heavy is installed unless you both enable this and install the engine. Requires restart to take effect. REQUIRES the master \"Enable beta features\" toggle above (and in the web UI) to be on — otherwise this sub-flag is ignored at runtime regardless of its value here.",
166
166
  "actions.restart_server": "Restart HA-MCP Server",
@@ -474,12 +474,6 @@
474
474
  "advanced.enable_history_query_guardrails.help": "Reject recorder queries that exceed conservative entity and time-range budgets. Disabled by default.",
475
475
  "advanced.ha_tool_concurrency.label": "Home Assistant tool concurrency",
476
476
  "advanced.ha_tool_concurrency.help": "Optional limit on outer Home Assistant tool calls across all sessions. Internal REST, WebSocket, and per-tool fan-out concurrency is unchanged. 0 keeps unlimited behavior. A call waiting for capacity fails after 60 seconds.",
477
- "advanced.backup_hint.label": "Backup hint level",
478
- "advanced.backup_hint.help": "How strongly AI assistants are told to suggest a full Home Assistant backup before risky changes. It changes only this hint; automatic edit backups have their own setting.",
479
- "advanced.backup_hint.choices.strong": "Strong",
480
- "advanced.backup_hint.choices.normal": "Normal",
481
- "advanced.backup_hint.choices.weak": "Weak",
482
- "advanced.backup_hint.choices.auto": "Automatic",
483
477
  "advanced.dashboard_screenshot_engine_url.label": "Dashboard screenshot engine URL",
484
478
  "advanced.dashboard_screenshot_engine_url.help": "Base URL of the screenshot engine. Leave blank for Supervisor auto-discovery. Applies immediately.",
485
479
  "advanced.enable_websocket.label": "Enable WebSocket",
@@ -474,12 +474,6 @@
474
474
  "advanced.enable_history_query_guardrails.help": "Malakcepti registrilajn kuriojn, kiuj superas konservativajn entajn kaj tempintervalajn buĝetojn. Malŝaltite defaŭlte.",
475
475
  "advanced.ha_tool_concurrency.label": "Konkureco de hejmaŭtomatigaj iloj de Home Assistant",
476
476
  "advanced.ha_tool_concurrency.help": "Laŭvola limo pri eksteraj Home Assistant ilvokoj tra ĉiuj seancoj. Interna REST, WebSocket, kaj samtempeco de disbranĉigo po ilo estas senŝanĝaj. 0 konservas senliman konduton. Voko atendanta kapaciton malsukcesas post 60 sekundoj.",
477
- "advanced.backup_hint.label": "Nivelo de konsilo pri momentfotoj",
478
- "advanced.backup_hint.help": "Kiom forte oni diras al AI-asistantoj sugesti plenan momentfoton de Home Assistant antaŭ riskaj ŝanĝoj. Ĝi ŝanĝas nur ĉi tiun konsilon; aŭtomataj redaktaj momentfotoj havas sian propran agordon.",
479
- "advanced.backup_hint.choices.strong": "Forta",
480
- "advanced.backup_hint.choices.normal": "Normala",
481
- "advanced.backup_hint.choices.weak": "Malforta",
482
- "advanced.backup_hint.choices.auto": "Aŭtomata",
483
477
  "advanced.dashboard_screenshot_engine_url.label": "URL de panelo-ekrankopiga motoro",
484
478
  "advanced.dashboard_screenshot_engine_url.help": "Baza URL de la ekrankopiga motoro. Lasu malplena por aŭtomata malkovro de Supervisor. Aplikiĝas tuj.",
485
479
  "advanced.enable_websocket.label": "Ebligi WebSocket",
@@ -474,12 +474,6 @@
474
474
  "advanced.enable_history_query_guardrails.help": "Rechazar consultas del registrador que superen los límites conservadores de entidades y rangos de tiempo. Desactivado por defecto.",
475
475
  "advanced.ha_tool_concurrency.label": "Concurrencia de herramientas de Home Assistant",
476
476
  "advanced.ha_tool_concurrency.help": "Límite opcional en las llamadas a herramientas externas de Home Assistant en todas las sesiones. La concurrencia interna de REST, WebSocket y de distribución por herramienta no se modifica. 0 mantiene el comportamiento ilimitado. Una llamada que espera capacidad falla después de 60 segundos.",
477
- "advanced.backup_hint.label": "Nivel de sugerencia de copia de seguridad",
478
- "advanced.backup_hint.help": "Con qué intensidad se indica a los asistentes de IA que sugieran una copia de seguridad completa de Home Assistant antes de realizar cambios arriesgados. Solo cambia esta sugerencia; las copias de seguridad de edición automática tienen su propia configuración.",
479
- "advanced.backup_hint.choices.strong": "Fuerte",
480
- "advanced.backup_hint.choices.normal": "Normal",
481
- "advanced.backup_hint.choices.weak": "Suave",
482
- "advanced.backup_hint.choices.auto": "Automático",
483
477
  "advanced.dashboard_screenshot_engine_url.label": "URL del motor de capturas de pantalla de paneles",
484
478
  "advanced.dashboard_screenshot_engine_url.help": "URL base del motor de capturas. Déjalo vacío para la detección automática del Supervisor. Se aplica de inmediato.",
485
479
  "advanced.enable_websocket.label": "Activar WebSocket",
@@ -474,12 +474,6 @@
474
474
  "advanced.enable_history_query_guardrails.help": "Rejette les requêtes d'historique qui dépassent les budgets prudents d'entités et de plages horaires. Désactivé par défaut.",
475
475
  "advanced.ha_tool_concurrency.label": "Concurrence des outils Home Assistant",
476
476
  "advanced.ha_tool_concurrency.help": "Limite facultative sur les appels d'outils Home Assistant externes pour toutes les sessions. La concurrence interne pour REST, WebSocket et la répartition par outil reste inchangée. 0 conserve un comportement illimité. Un appel en attente de capacité échoue après 60 secondes.",
477
- "advanced.backup_hint.label": "Niveau d'indication de sauvegarde",
478
- "advanced.backup_hint.help": "Avec quelle insistance il est demandé aux assistants IA de suggérer une sauvegarde complète de Home Assistant avant des modifications risquées. Cela ne modifie que cette indication ; les sauvegardes automatiques de modification ont leur propre paramètre.",
479
- "advanced.backup_hint.choices.strong": "Fort",
480
- "advanced.backup_hint.choices.normal": "Normal",
481
- "advanced.backup_hint.choices.weak": "Faible",
482
- "advanced.backup_hint.choices.auto": "Automatique",
483
477
  "advanced.dashboard_screenshot_engine_url.label": "URL du moteur de capture d'écran du tableau de bord",
484
478
  "advanced.dashboard_screenshot_engine_url.help": "URL de base du moteur de capture d'écran. Laissez vide pour la découverte automatique par le Supervisor. S'applique immédiatement.",
485
479
  "advanced.enable_websocket.label": "Activer WebSocket",
@@ -474,12 +474,6 @@
474
474
  "advanced.enable_history_query_guardrails.help": "Rifiuta le query del recorder che superano i limiti conservativi di entità e intervallo di tempo. Disabilitato per impostazione predefinita.",
475
475
  "advanced.ha_tool_concurrency.label": "Concorrenza degli strumenti di Home Assistant",
476
476
  "advanced.ha_tool_concurrency.help": "Limite opzionale sulle chiamate esterne agli strumenti di Home Assistant in tutte le sessioni. La concorrenza interna di REST, WebSocket e di distribuzione per singolo strumento rimane invariata. 0 mantiene il comportamento illimitato. Una chiamata in attesa di capacità fallisce dopo 60 secondi.",
477
- "advanced.backup_hint.label": "Livello di suggerimento per il backup",
478
- "advanced.backup_hint.help": "Con quale insistenza gli assistenti IA vengono invitati a suggerire un backup completo di Home Assistant prima di modifiche rischiose. Modifica solo questo suggerimento; i backup di modifica automatici hanno una propria impostazione.",
479
- "advanced.backup_hint.choices.strong": "Forte",
480
- "advanced.backup_hint.choices.normal": "Normale",
481
- "advanced.backup_hint.choices.weak": "Debole",
482
- "advanced.backup_hint.choices.auto": "Automatico",
483
477
  "advanced.dashboard_screenshot_engine_url.label": "URL del motore per gli screenshot delle dashboard",
484
478
  "advanced.dashboard_screenshot_engine_url.help": "URL di base del motore per gli screenshot. Lascia vuoto per il rilevamento automatico tramite Supervisor. Ha effetto immediato.",
485
479
  "advanced.enable_websocket.label": "Attiva il WebSocket",
@@ -474,12 +474,6 @@
474
474
  "advanced.enable_history_query_guardrails.help": "보수적인 엔티티 및 시간 범위 예산을 초과하는 recorder 쿼리를 거부합니다. 기본적으로 비활성화되어 있습니다.",
475
475
  "advanced.ha_tool_concurrency.label": "Home Assistant 도구 동시성",
476
476
  "advanced.ha_tool_concurrency.help": "모든 세션에 걸친 외부 Home Assistant 도구 호출의 선택적 제한. 내부 REST, WebSocket 및 도구별 팬아웃 동시성은 변경되지 않습니다. 0은 무제한 동작을 유지합니다. 용량을 대기 중인 호출은 60초 후에 실패합니다.",
477
- "advanced.backup_hint.label": "백업 힌트 수준",
478
- "advanced.backup_hint.help": "위험한 변경 전에 전체 Home Assistant 백업을 제안하도록 AI 어시스턴트에 지시하는 강도입니다. 이 힌트만 변경하며 자동 편집 백업에는 자체 설정이 있습니다.",
479
- "advanced.backup_hint.choices.strong": "강하게",
480
- "advanced.backup_hint.choices.normal": "보통",
481
- "advanced.backup_hint.choices.weak": "약하게",
482
- "advanced.backup_hint.choices.auto": "자동",
483
477
  "advanced.dashboard_screenshot_engine_url.label": "대시보드 스크린샷 엔진 URL",
484
478
  "advanced.dashboard_screenshot_engine_url.help": "스크린샷 엔진의 기본 URL입니다. Supervisor 자동 검색을 쓰려면 비워 두세요. 즉시 적용됩니다.",
485
479
  "advanced.enable_websocket.label": "WebSocket 사용",
@@ -474,12 +474,6 @@
474
474
  "advanced.enable_history_query_guardrails.help": "Wijs recorderquery's af die de conservatieve budgetten voor entiteiten en tijdsbereik overschrijden. Standaard uitgeschakeld.",
475
475
  "advanced.ha_tool_concurrency.label": "Home Assistant-toolgelijktijdigheid",
476
476
  "advanced.ha_tool_concurrency.help": "Optionele limiet voor uiterste Home Assistant-toolaanroepen over alle sessies heen. Interne REST-, WebSocket- en per-tool fan-out-gelijktijdigheid blijft ongewijzigd. 0 behoudt onbeperkt gedrag. Een aanroep die wacht op capaciteit mislukt na 60 seconden.",
477
- "advanced.backup_hint.label": "Niveau van back-uptip",
478
- "advanced.backup_hint.help": "Hoe sterk AI-assistenten worden aangespoord om een volledige Home Assistant-back-up voor te stellen vóór risicovolle wijzigingen. Dit wijzigt alleen deze tip; automatische bewerkingsback-ups hebben hun eigen instelling.",
479
- "advanced.backup_hint.choices.strong": "Sterk",
480
- "advanced.backup_hint.choices.normal": "Normaal",
481
- "advanced.backup_hint.choices.weak": "Zwak",
482
- "advanced.backup_hint.choices.auto": "Automatisch",
483
477
  "advanced.dashboard_screenshot_engine_url.label": "Dashboard screenshot engine URL",
484
478
  "advanced.dashboard_screenshot_engine_url.help": "Basis-URL van de screenshot engine. Laat leeg voor Supervisor auto-ontdekking. Wordt onmiddellijk toegepast.",
485
479
  "advanced.enable_websocket.label": "WebSocket inschakelen",
@@ -474,12 +474,6 @@
474
474
  "advanced.enable_history_query_guardrails.help": "Odrzucaj zapytania rejestratora przekraczające zachowawcze limity encji i zakresu czasu. Domyślnie wyłączone.",
475
475
  "advanced.ha_tool_concurrency.label": "Współbieżność narzędzi Home Assistant",
476
476
  "advanced.ha_tool_concurrency.help": "Opcjonalny limit zewnętrznych wywołań narzędzi Home Assistant we wszystkich sesjach. Współbieżność wewnętrznych żądań REST, WebSocket oraz rozgałęzień na narzędzie pozostaje bez zmian. Wartość 0 oznacza brak limitu. Wywołanie oczekujące na wolne zasoby zakończy się niepowodzeniem po 60 sekundach.",
477
- "advanced.backup_hint.label": "Poziom podpowiedzi kopii zapasowej",
478
- "advanced.backup_hint.help": "Jak stanowczo asystenci AI są instruowani, aby sugerować pełną kopię zapasową Home Assistant przed ryzykownymi zmianami. Zmienia to tylko tę podpowiedź; automatyczne kopie zapasowe edycji mają własne ustawienie.",
479
- "advanced.backup_hint.choices.strong": "Silny",
480
- "advanced.backup_hint.choices.normal": "Normalny",
481
- "advanced.backup_hint.choices.weak": "Słaby",
482
- "advanced.backup_hint.choices.auto": "Automatyczny",
483
477
  "advanced.dashboard_screenshot_engine_url.label": "Adres URL silnika zrzutów ekranu pulpitu nawigacyjnego",
484
478
  "advanced.dashboard_screenshot_engine_url.help": "Bazowy adres URL silnika zrzutów ekranu. Pozostaw puste dla automatycznego wykrywania przez Supervisor. Obowiązuje natychmiast.",
485
479
  "advanced.enable_websocket.label": "Włącz WebSocket",
@@ -474,12 +474,6 @@
474
474
  "advanced.enable_history_query_guardrails.help": "Отклонять запросы к истории, превышающие консервативные лимиты по объектам и временным диапазонам. Отключено по умолчанию.",
475
475
  "advanced.ha_tool_concurrency.label": "Параллелизм инструментов Home Assistant",
476
476
  "advanced.ha_tool_concurrency.help": "Необязательное ограничение на внешние вызовы инструментов Home Assistant во всех сеансах. Внутренние REST, WebSocket и параллельность запросов по инструментам остаются без изменений. 0 сохраняет поведение без ограничений. Запрос, ожидающий свободного ресурса, завершается ошибкой через 60 секунд.",
477
- "advanced.backup_hint.label": "Уровень подсказок резервного копирования",
478
- "advanced.backup_hint.help": "Насколько настойчиво ИИ-ассистентам рекомендуется предлагать создание полной резервной копии Home Assistant перед рискованными изменениями. Изменяет только эту подсказку; автоматические резервные копии редактирования имеют собственный параметр.",
479
- "advanced.backup_hint.choices.strong": "Настойчивое",
480
- "advanced.backup_hint.choices.normal": "Обычное",
481
- "advanced.backup_hint.choices.weak": "Мягкое",
482
- "advanced.backup_hint.choices.auto": "Автоматическое",
483
477
  "advanced.dashboard_screenshot_engine_url.label": "URL движка снимков панели",
484
478
  "advanced.dashboard_screenshot_engine_url.help": "Базовый URL движка. Оставьте пустым для автопоиска через Supervisor. Действует сразу.",
485
479
  "advanced.enable_websocket.label": "Включить WebSocket",
@@ -474,12 +474,6 @@
474
474
  "advanced.enable_history_query_guardrails.help": "Avvisa recorder-frågor som överskrider konservativa budgetar för entiteter och tidsintervall. Inaktiverat som standard.",
475
475
  "advanced.ha_tool_concurrency.label": "Samtidighet för Home Assistant-verktyg",
476
476
  "advanced.ha_tool_concurrency.help": "Valfri gräns för yttre Home Assistant-verktygsanrop över alla sessioner. Intern REST-, WebSocket- och per-verktyg-samtidighet förblir oförändrad. 0 behåller obegränsat beteende. Ett anrop som väntar på kapacitet misslyckas efter 60 sekunder.",
477
- "advanced.backup_hint.label": "Nivå för säkerhetskopieringstips",
478
- "advanced.backup_hint.help": "Hur starkt AI-assistenter uppmanas att föreslå en fullständig Home Assistant-säkerhetskopia före riskabla ändringar. Det ändrar bara detta tips; automatiska redigeringssäkerhetskopior har sin egen inställning.",
479
- "advanced.backup_hint.choices.strong": "Stark",
480
- "advanced.backup_hint.choices.normal": "Normal",
481
- "advanced.backup_hint.choices.weak": "Svag",
482
- "advanced.backup_hint.choices.auto": "Automatisk",
483
477
  "advanced.dashboard_screenshot_engine_url.label": "URL för skärmbildsmotor för instrumentpanel",
484
478
  "advanced.dashboard_screenshot_engine_url.help": "Bas-URL för skärmbildsmotorn. Lämna tomt för automatisk upptäckt av Supervisor. Tillämpas omedelbart.",
485
479
  "advanced.enable_websocket.label": "Aktivera WebSocket",