ha-mcp-dev 8.5.0.dev2734__tar.gz → 8.5.0.dev2740__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.
- {ha_mcp_dev-8.5.0.dev2734/src/ha_mcp_dev.egg-info → ha_mcp_dev-8.5.0.dev2740}/PKG-INFO +1 -1
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/pyproject.toml +1 -1
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/client/rest_client.py +137 -30
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/client/websocket_client.py +134 -13
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/server.py +2 -2
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/settings_ui/locales/az.json +1 -1
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/settings_ui/locales/cs.json +1 -1
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/settings_ui/locales/de.json +1 -1
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/settings_ui/locales/eo.json +1 -1
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/settings_ui/locales/es.json +1 -1
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/settings_ui/locales/fr.json +1 -1
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/settings_ui/locales/it.json +1 -1
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/settings_ui/locales/ko.json +1 -1
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/settings_ui/locales/nl.json +1 -1
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/settings_ui/locales/pl.json +1 -1
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/settings_ui/locales/ru.json +1 -1
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/settings_ui/locales/sv.json +1 -1
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/settings_ui/locales/zh-Hans.json +1 -1
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/settings_ui/locales/zh-Hant.json +1 -1
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/config_entry_reload_watch.py +1 -1
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/hacs_registration.py +1 -1
- ha_mcp_dev-8.5.0.dev2740/src/ha_mcp/tools/tools_utility.py +472 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740/src/ha_mcp_dev.egg-info}/PKG-INFO +1 -1
- ha_mcp_dev-8.5.0.dev2734/src/ha_mcp/tools/tools_utility.py +0 -278
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/LICENSE +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/MANIFEST.in +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/README.md +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/setup.cfg +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/__main__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_pypi_marker +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_rich_compat.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/requirements.txt +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/client.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/server.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_vendor/websockets/version.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/_version.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/auth/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/auth/consent_form.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/auth/oidc_compat.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/auth/provider.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/backup_manager.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/browser_landing.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/client/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/client/supervisor_client.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/client/websocket_listener.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/config.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/errors.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/ha_request_queue.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/hacs_auto_refresh.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/http_transport.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/llm_exposure.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/log_filters.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/policy/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/policy/approval_queue.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/policy/decision_pin.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/policy/decisions.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/policy/editing.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/policy/evaluator.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/policy/events.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/policy/handlers.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/policy/middleware.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/policy/model.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/policy/persistence.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/policy/value_sources.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/py.typed +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/read_only.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/redaction.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/renamed_tools.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/resources/skills-vendor/.github/pull_request_template.md +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/resources/skills-vendor/evals/area-target-over-entity-list/case.yaml +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/resources/skills-vendor/evals/arrive-home-automation/case.yaml +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/resources/skills-vendor/evals/assist-shortcut-card/case.yaml +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/resources/skills-vendor/evals/avg-temperature/case.yaml +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/resources/skills-vendor/evals/backup-deletion-confirmation/case.yaml +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/resources/skills-vendor/evals/blueprint-authoring/case.yaml +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/resources/skills-vendor/evals/button-event-entity/case.yaml +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/resources/skills-vendor/evals/device-id-trigger-migration/case.yaml +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/resources/skills-vendor/evals/helper-flow-fields-not-platform-yaml/case.yaml +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/resources/skills-vendor/evals/media-player-song/case.yaml +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/resources/skills-vendor/evals/motion-light-automation-mode/case.yaml +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/resources/skills-vendor/evals/rename-entity-impact-analysis/case.yaml +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/resources/skills-vendor/evals/template-attributes-yaml-exception/case.yaml +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/resources/skills-vendor/evals/timer-finished-automation/case.yaml +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/resources/skills-vendor/evals/vacuum-last-clean/case.yaml +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/resources/skills-vendor/scripts/check_eval_cases.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/settings_ui/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/settings_ui/_i18n.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/settings_ui/_persistence.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/settings_ui/_theme.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/settings_ui/locales/README.md +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/settings_ui/locales/en.json +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/settings_ui/settings.css +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/settings_ui/settings.html +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/settings_ui/settings.js +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/smoke_test.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/strict_bps.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tool_dispatch.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/auto_backup.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/backup.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/best_practice_checker.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/best_practice_result.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/best_practice_variables.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/blueprint_sources.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/blueprint_write.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/bulk_selector.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/component_api.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/component_config_entries.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/component_config_reads.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/component_devices.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/component_registries.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/config_entry_flow.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/config_entry_identity.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/device_control.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/entity_registration.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/error_log_parsing.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/helpers.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/log_common.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/log_sources.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/log_sources_fault.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/radio/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/radio/base.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/radio/matter.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/radio/thread.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/radio/zigbee.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/radio/zwave.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/reference_validator.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/registry.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/scene_discovery.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/smart_search/_base.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/smart_search/_config.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/tools_addons.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/tools_areas.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/tools_blueprints.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/tools_bug_report.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/tools_calendar.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/tools_camera.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/tools_categories.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/tools_code.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/tools_config_automations.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/tools_dev.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/tools_energy.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/tools_entities.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/tools_filesystem.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/tools_groups.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/tools_hacs.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/tools_history.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/tools_integrations.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/tools_labels.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/tools_logs.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/tools_radio.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/tools_registry.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/tools_resources.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/tools_search.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/tools_security_policy.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/tools_service.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/tools_services.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/tools_system.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/tools_themes.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/tools_todo.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/tools_traces.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/tools_updates.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/tools_zones.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/util_helpers.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/tools/validation_middleware.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/transforms/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/transforms/categorized_search.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/transforms/component_search.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/transforms/write_tool_note.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/transport_security.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/update_check.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/utils/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/utils/config_hash.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/utils/config_write_lock.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/utils/dashboard_patch.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/utils/data_paths.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/utils/domain_handlers.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/utils/entity_membership.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/utils/fuzzy_search.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/utils/mcp_client_host.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/utils/operation_manager.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/utils/python_sandbox.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/utils/registry_update_lock.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/utils/skill_loader.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/utils/usage_logger.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/visibility/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/visibility/enforcement.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/visibility/model.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/visibility/persistence.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/visibility/resolver.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp_dev.egg-info/SOURCES.txt +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/tests/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/tests/test_constants.py +0 -0
- {ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/tests/test_env_manager.py +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "ha-mcp-dev"
|
|
7
|
-
version = "8.5.0.
|
|
7
|
+
version = "8.5.0.dev2740"
|
|
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
|
|
@@ -239,6 +239,91 @@ _NO_ANSWER_ERRORS = (
|
|
|
239
239
|
WebSocketException,
|
|
240
240
|
)
|
|
241
241
|
|
|
242
|
+
RENDER_NO_VERDICT_WITHOUT_REPORT_ERRORS = (
|
|
243
|
+
"No template result from Home Assistant. With report_errors=false Home "
|
|
244
|
+
"Assistant does not report a failed render (it only writes the error to "
|
|
245
|
+
"its own log), so the template most likely failed. Retry with "
|
|
246
|
+
"report_errors=true to get the error."
|
|
247
|
+
)
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
def _is_typed_template_error(error: str) -> bool:
|
|
251
|
+
"""True for ``"UndefinedError: ..."``-style messages that name the class."""
|
|
252
|
+
name = error.partition(": ")[0]
|
|
253
|
+
return name.isidentifier() and name.endswith(("Error", "Exception"))
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
def _pick_render_error(first: str, queue: asyncio.Queue[dict[str, Any]]) -> str:
|
|
257
|
+
"""Choose the clearest of the ERROR events already queued after ``first``.
|
|
258
|
+
|
|
259
|
+
One failure can arrive as several events: an undefined attribute is
|
|
260
|
+
reported once bare (``'dict object' has no attribute 'split'``) and once
|
|
261
|
+
with its class (``UndefinedError: ...``). The class-named one is kept.
|
|
262
|
+
"""
|
|
263
|
+
candidates = [first]
|
|
264
|
+
while True:
|
|
265
|
+
try:
|
|
266
|
+
event = queue.get_nowait().get("event") or {}
|
|
267
|
+
except (asyncio.QueueEmpty, asyncio.QueueShutDown):
|
|
268
|
+
break
|
|
269
|
+
error = event.get("error")
|
|
270
|
+
if event.get("level") == "ERROR" and isinstance(error, str):
|
|
271
|
+
candidates.append(error)
|
|
272
|
+
return next((e for e in candidates if _is_typed_template_error(e)), first)
|
|
273
|
+
|
|
274
|
+
|
|
275
|
+
async def _read_render_verdict(
|
|
276
|
+
queue: asyncio.Queue[dict[str, Any]],
|
|
277
|
+
template: Any,
|
|
278
|
+
wait: float,
|
|
279
|
+
report_errors: bool,
|
|
280
|
+
) -> dict[str, Any]:
|
|
281
|
+
"""Read ``render_template`` events up to the render's verdict."""
|
|
282
|
+
warnings: list[str] = []
|
|
283
|
+
try:
|
|
284
|
+
async with asyncio.timeout(wait):
|
|
285
|
+
while True:
|
|
286
|
+
event = (await queue.get()).get("event") or {}
|
|
287
|
+
if "result" in event:
|
|
288
|
+
response: dict[str, Any] = {
|
|
289
|
+
"success": True,
|
|
290
|
+
"result": event["result"],
|
|
291
|
+
"template": template,
|
|
292
|
+
"listeners": event.get("listeners", {}),
|
|
293
|
+
}
|
|
294
|
+
break
|
|
295
|
+
error = event.get("error")
|
|
296
|
+
if not isinstance(error, str):
|
|
297
|
+
logger.debug("render_template: unrecognised event %r", event)
|
|
298
|
+
continue
|
|
299
|
+
if event.get("level") == "ERROR":
|
|
300
|
+
response = {
|
|
301
|
+
"success": False,
|
|
302
|
+
"error": _pick_render_error(error, queue),
|
|
303
|
+
"template": template,
|
|
304
|
+
}
|
|
305
|
+
break
|
|
306
|
+
if error not in warnings:
|
|
307
|
+
warnings.append(error)
|
|
308
|
+
except TimeoutError:
|
|
309
|
+
response = {
|
|
310
|
+
"success": False,
|
|
311
|
+
"error": (
|
|
312
|
+
"Event timeout - template result not received"
|
|
313
|
+
if report_errors
|
|
314
|
+
else RENDER_NO_VERDICT_WITHOUT_REPORT_ERRORS
|
|
315
|
+
),
|
|
316
|
+
"no_verdict": True,
|
|
317
|
+
"template": template,
|
|
318
|
+
}
|
|
319
|
+
except asyncio.QueueShutDown as e:
|
|
320
|
+
raise HomeAssistantConnectionError(
|
|
321
|
+
"WebSocket connection to Home Assistant closed while rendering the template"
|
|
322
|
+
) from e
|
|
323
|
+
if warnings:
|
|
324
|
+
response["warnings"] = warnings
|
|
325
|
+
return response
|
|
326
|
+
|
|
242
327
|
|
|
243
328
|
class HomeAssistantClient:
|
|
244
329
|
"""Authenticated HTTP client for Home Assistant API."""
|
|
@@ -1768,7 +1853,7 @@ class HomeAssistantClient:
|
|
|
1768
1853
|
)
|
|
1769
1854
|
acquiring = False
|
|
1770
1855
|
|
|
1771
|
-
#
|
|
1856
|
+
# render_template is a subscription; see _handle_render_template.
|
|
1772
1857
|
if message.get("type") == "render_template":
|
|
1773
1858
|
return await self._handle_render_template(ws_client, message)
|
|
1774
1859
|
|
|
@@ -1868,37 +1953,46 @@ class HomeAssistantClient:
|
|
|
1868
1953
|
async def _handle_render_template(
|
|
1869
1954
|
self, ws_client: Any, message: dict[str, Any]
|
|
1870
1955
|
) -> dict[str, Any]:
|
|
1871
|
-
"""
|
|
1956
|
+
"""Render a template, keeping the errors and warnings HA reports.
|
|
1957
|
+
|
|
1958
|
+
``render_template`` opens a subscription. With ``report_errors`` HA sends
|
|
1959
|
+
each template error or warning as an ``{"error", "level"}`` event,
|
|
1960
|
+
possibly before the result frame (#2522). The first ERROR event or
|
|
1961
|
+
``{"result", "listeners"}`` event is the render's verdict; WARNING
|
|
1962
|
+
events seen before it are returned in ``warnings`` whatever the
|
|
1963
|
+
outcome. Without ``report_errors`` HA only logs a failed render and
|
|
1964
|
+
never sends a verdict, so the wait runs out (``no_verdict``). The
|
|
1965
|
+
subscription is released in every case, or HA keeps re-rendering the
|
|
1966
|
+
template on every relevant state change for the life of the socket.
|
|
1967
|
+
"""
|
|
1968
|
+
template = message.get("template")
|
|
1872
1969
|
template_timeout = message.get("timeout", 3)
|
|
1970
|
+
report_errors = message.get("report_errors", True)
|
|
1971
|
+
params: dict[str, Any] = {
|
|
1972
|
+
"template": template,
|
|
1973
|
+
"timeout": template_timeout,
|
|
1974
|
+
"report_errors": report_errors,
|
|
1975
|
+
}
|
|
1976
|
+
if message.get("strict"):
|
|
1977
|
+
params["strict"] = True
|
|
1978
|
+
if message.get("variables") is not None:
|
|
1979
|
+
params["variables"] = message["variables"]
|
|
1873
1980
|
|
|
1874
1981
|
try:
|
|
1875
|
-
|
|
1876
|
-
"render_template",
|
|
1877
|
-
wait_timeout=template_timeout + 2,
|
|
1878
|
-
template=message.get("template"),
|
|
1879
|
-
timeout=template_timeout,
|
|
1880
|
-
report_errors=message.get("report_errors", True),
|
|
1982
|
+
sub_id, queue = await ws_client.subscribe_command(
|
|
1983
|
+
"render_template", wait_timeout=template_timeout + 2, **params
|
|
1881
1984
|
)
|
|
1882
|
-
|
|
1883
|
-
|
|
1884
|
-
#
|
|
1885
|
-
|
|
1886
|
-
|
|
1887
|
-
|
|
1888
|
-
|
|
1889
|
-
|
|
1890
|
-
|
|
1891
|
-
|
|
1892
|
-
|
|
1893
|
-
"listeners": listeners_info,
|
|
1894
|
-
}
|
|
1895
|
-
else:
|
|
1896
|
-
return {
|
|
1897
|
-
"success": False,
|
|
1898
|
-
"error": "Invalid event response format",
|
|
1899
|
-
"template": message.get("template"),
|
|
1900
|
-
}
|
|
1901
|
-
|
|
1985
|
+
except HomeAssistantCommandError as e:
|
|
1986
|
+
# A rejection of the command itself: the render exceeded its
|
|
1987
|
+
# timeout, or the template/variables failed HA's schema.
|
|
1988
|
+
return {
|
|
1989
|
+
"success": False,
|
|
1990
|
+
"error": str(e).removeprefix(
|
|
1991
|
+
"subscribe_command('render_template') failed: "
|
|
1992
|
+
),
|
|
1993
|
+
"error_code": e.code,
|
|
1994
|
+
"template": template,
|
|
1995
|
+
}
|
|
1902
1996
|
except TimeoutError:
|
|
1903
1997
|
# Template-level, not transport-level: the wait budget here is the
|
|
1904
1998
|
# caller's own ``timeout`` (default 3s) plus two seconds, and a
|
|
@@ -1908,7 +2002,8 @@ class HomeAssistantClient:
|
|
|
1908
2002
|
return {
|
|
1909
2003
|
"success": False,
|
|
1910
2004
|
"error": "Event timeout - template result not received",
|
|
1911
|
-
"
|
|
2005
|
+
"no_verdict": True,
|
|
2006
|
+
"template": template,
|
|
1912
2007
|
}
|
|
1913
2008
|
except Exception as e:
|
|
1914
2009
|
if isinstance(e, _NO_ANSWER_ERRORS):
|
|
@@ -1917,12 +2012,24 @@ class HomeAssistantClient:
|
|
|
1917
2012
|
# in ``send_websocket_message`` — the very swallow this branch
|
|
1918
2013
|
# used to hide (#1947).
|
|
1919
2014
|
raise
|
|
2015
|
+
# Neither Home Assistant's answer nor a dead transport: a fault on
|
|
2016
|
+
# this side. Flagged so the tool does not present it as an error
|
|
2017
|
+
# in the caller's template.
|
|
2018
|
+
logger.exception("render_template failed on the client side")
|
|
1920
2019
|
return {
|
|
1921
2020
|
"success": False,
|
|
1922
2021
|
"error": str(e),
|
|
1923
|
-
"
|
|
2022
|
+
"client_error": True,
|
|
2023
|
+
"template": template,
|
|
1924
2024
|
}
|
|
1925
2025
|
|
|
2026
|
+
try:
|
|
2027
|
+
return await _read_render_verdict(
|
|
2028
|
+
queue, template, template_timeout + 2, report_errors
|
|
2029
|
+
)
|
|
2030
|
+
finally:
|
|
2031
|
+
await ws_client.release_subscription(sub_id)
|
|
2032
|
+
|
|
1926
2033
|
async def _resolve_script_id(self, identifier: str) -> str:
|
|
1927
2034
|
"""
|
|
1928
2035
|
Resolve a script identifier to its storage key via the entity registry.
|
|
@@ -155,6 +155,9 @@ class WebSocketConnectionState:
|
|
|
155
155
|
# registered for a given id, every event with that id is pushed
|
|
156
156
|
# into it instead of going to ``event_type``-keyed handlers.
|
|
157
157
|
self._subscription_queues: dict[int, asyncio.Queue[dict[str, Any]]] = {}
|
|
158
|
+
# Ids of subscribe commands whose caller gave up before Home Assistant
|
|
159
|
+
# acknowledged them. See ``take_abandoned_subscription``.
|
|
160
|
+
self._abandoned_subscriptions: set[int] = set()
|
|
158
161
|
|
|
159
162
|
def next_message_id(self) -> int:
|
|
160
163
|
"""Reserve the next available WebSocket message identifier."""
|
|
@@ -213,6 +216,24 @@ class WebSocketConnectionState:
|
|
|
213
216
|
# Same GC guard as cancel_pending_request above.
|
|
214
217
|
future.exception()
|
|
215
218
|
|
|
219
|
+
def mark_abandoned_subscription(self, message_id: int) -> None:
|
|
220
|
+
"""Record a subscribe command whose acknowledgement nobody awaits."""
|
|
221
|
+
self._abandoned_subscriptions.add(message_id)
|
|
222
|
+
|
|
223
|
+
def take_abandoned_subscription(self, message_id: int) -> bool:
|
|
224
|
+
"""Forget an abandoned subscribe command; True if it was one.
|
|
225
|
+
|
|
226
|
+
Home Assistant may register a subscription only after the caller has
|
|
227
|
+
given up and the immediate release answered ``not_found`` — a
|
|
228
|
+
``render_template`` setup waits out the template's own timeout first.
|
|
229
|
+
Its late acknowledgement then arrives with no pending request, and
|
|
230
|
+
this is how the dispatch recognises that it still has to release it.
|
|
231
|
+
"""
|
|
232
|
+
if message_id in self._abandoned_subscriptions:
|
|
233
|
+
self._abandoned_subscriptions.discard(message_id)
|
|
234
|
+
return True
|
|
235
|
+
return False
|
|
236
|
+
|
|
216
237
|
def store_auth_message(self, message_type: str, data: dict[str, Any]) -> None:
|
|
217
238
|
"""Store an authentication handshake message."""
|
|
218
239
|
self._auth_messages[message_type] = data
|
|
@@ -267,6 +288,8 @@ class WebSocketConnectionState:
|
|
|
267
288
|
for queue in self._subscription_queues.values():
|
|
268
289
|
queue.shutdown(immediate=True)
|
|
269
290
|
self._subscription_queues.clear()
|
|
291
|
+
# Subscriptions die with the socket, and ids restart on the next one.
|
|
292
|
+
self._abandoned_subscriptions.clear()
|
|
270
293
|
|
|
271
294
|
self._auth_messages.clear()
|
|
272
295
|
|
|
@@ -370,6 +393,9 @@ class HomeAssistantWebSocketClient:
|
|
|
370
393
|
self._send_lock: asyncio.Lock | None = None
|
|
371
394
|
self._lock_loop: asyncio.AbstractEventLoop | None = None
|
|
372
395
|
self._state = WebSocketConnectionState()
|
|
396
|
+
# Releases of subscriptions acknowledged after their caller gave up,
|
|
397
|
+
# held here so the tasks are not garbage-collected mid-flight.
|
|
398
|
+
self._late_releases: set[asyncio.Task[None]] = set()
|
|
373
399
|
# Reason the most recent connect() attempt failed (exception text),
|
|
374
400
|
# or None. Surfaced by callers so the agent sees *why* a WebSocket
|
|
375
401
|
# connection failed instead of an opaque "Failed to connect" string.
|
|
@@ -594,13 +620,24 @@ class HomeAssistantWebSocketClient:
|
|
|
594
620
|
self._state.store_auth_message(message_type, data)
|
|
595
621
|
return
|
|
596
622
|
|
|
597
|
-
# Handle command responses
|
|
598
|
-
|
|
623
|
+
# Handle command responses. An event frame is never the reply to a
|
|
624
|
+
# command, even when it shares the command's id and arrives first:
|
|
625
|
+
# render_template reports template errors as events before its result
|
|
626
|
+
# frame (#2522).
|
|
627
|
+
if message_id is not None and message_type != "event":
|
|
599
628
|
future = self._state.resolve_pending_request(message_id)
|
|
600
629
|
if future:
|
|
601
630
|
if not future.cancelled():
|
|
602
631
|
future.set_result(data)
|
|
603
632
|
return
|
|
633
|
+
if self._state.take_abandoned_subscription(message_id):
|
|
634
|
+
if message_type == "result" and data.get("success"):
|
|
635
|
+
task = asyncio.ensure_future(
|
|
636
|
+
self._release_abandoned_subscription(message_id)
|
|
637
|
+
)
|
|
638
|
+
self._late_releases.add(task)
|
|
639
|
+
task.add_done_callback(self._late_release_done)
|
|
640
|
+
return
|
|
604
641
|
|
|
605
642
|
# Handle events
|
|
606
643
|
if message_type == "event":
|
|
@@ -818,9 +855,9 @@ class HomeAssistantWebSocketClient:
|
|
|
818
855
|
) -> tuple[dict[str, Any], dict[str, Any]]:
|
|
819
856
|
"""Send a command that returns a result followed by an event response.
|
|
820
857
|
|
|
821
|
-
Some HA WebSocket commands (e.g. system_health/info
|
|
822
|
-
|
|
823
|
-
|
|
858
|
+
Some HA WebSocket commands (e.g. system_health/info) reply with an
|
|
859
|
+
immediate result message and then deliver the actual data in a
|
|
860
|
+
subsequent event message sharing the same message ID.
|
|
824
861
|
|
|
825
862
|
Args:
|
|
826
863
|
command_type: Type of command to send.
|
|
@@ -945,6 +982,7 @@ class HomeAssistantWebSocketClient:
|
|
|
945
982
|
# something that was never registered answers not_found, which
|
|
946
983
|
# the release treats as its ordinary outcome.
|
|
947
984
|
self.cancel_pending_response(message_id)
|
|
985
|
+
self._state.mark_abandoned_subscription(message_id)
|
|
948
986
|
await self._run_cleanup(
|
|
949
987
|
self._release_abandoned_subscription(message_id),
|
|
950
988
|
f"abandoned subscribe_events({message_id})",
|
|
@@ -964,6 +1002,7 @@ class HomeAssistantWebSocketClient:
|
|
|
964
1002
|
# it is this operation's job, not the caller's, because the id it
|
|
965
1003
|
# needs is the one the caller never receives.
|
|
966
1004
|
self.cancel_pending_response(message_id)
|
|
1005
|
+
self._state.mark_abandoned_subscription(message_id)
|
|
967
1006
|
await self._run_cleanup(
|
|
968
1007
|
self._release_abandoned_subscription(message_id),
|
|
969
1008
|
f"abandoned subscribe_events({message_id})",
|
|
@@ -1019,9 +1058,11 @@ class HomeAssistantWebSocketClient:
|
|
|
1019
1058
|
e,
|
|
1020
1059
|
)
|
|
1021
1060
|
|
|
1022
|
-
async def _run_cleanup(self, coro: Coroutine[Any, Any, None], what: str) ->
|
|
1061
|
+
async def _run_cleanup(self, coro: Coroutine[Any, Any, None], what: str) -> bool:
|
|
1023
1062
|
"""Run ``coro`` to completion or to a deadline, from a cancelled path.
|
|
1024
1063
|
|
|
1064
|
+
Returns whether it finished; False means the deadline stopped it.
|
|
1065
|
+
|
|
1025
1066
|
Cleanup scheduled while a cancellation is propagating cannot simply
|
|
1026
1067
|
be awaited: the await is cancelled in turn, and under a cancel scope
|
|
1027
1068
|
again at every suspension, so the tidying never happens. It also
|
|
@@ -1083,9 +1124,11 @@ class HomeAssistantWebSocketClient:
|
|
|
1083
1124
|
# stop it, then collect the outcome so a late failure does
|
|
1084
1125
|
# not surface as an orphaned "exception was never
|
|
1085
1126
|
# retrieved".
|
|
1086
|
-
|
|
1127
|
+
finished = task.done()
|
|
1128
|
+
if not finished:
|
|
1087
1129
|
task.cancel()
|
|
1088
1130
|
await asyncio.gather(task, return_exceptions=True)
|
|
1131
|
+
return finished
|
|
1089
1132
|
|
|
1090
1133
|
async def _release_abandoned_subscription(self, message_id: int) -> None:
|
|
1091
1134
|
"""Ask Home Assistant to drop a subscription we can no longer name.
|
|
@@ -1145,7 +1188,7 @@ class HomeAssistantWebSocketClient:
|
|
|
1145
1188
|
self,
|
|
1146
1189
|
command_type: str,
|
|
1147
1190
|
*,
|
|
1148
|
-
|
|
1191
|
+
wait_timeout: float = 30.0,
|
|
1149
1192
|
**kwargs: Any,
|
|
1150
1193
|
) -> tuple[int, asyncio.Queue[dict[str, Any]]]:
|
|
1151
1194
|
"""Send a subscribe-style command and return (subscription_id, queue).
|
|
@@ -1158,10 +1201,15 @@ class HomeAssistantWebSocketClient:
|
|
|
1158
1201
|
event-type handler registry; use this method for everything
|
|
1159
1202
|
else.
|
|
1160
1203
|
|
|
1204
|
+
``wait_timeout`` is named apart from ``**kwargs`` because those become
|
|
1205
|
+
fields of the command, and some commands (``render_template``) carry a
|
|
1206
|
+
``timeout`` field of their own.
|
|
1207
|
+
|
|
1161
1208
|
Returns:
|
|
1162
1209
|
(subscription_id, queue) — ``await queue.get()`` yields each
|
|
1163
1210
|
incoming ``{"id": N, "type": "event", "event": ...}`` payload.
|
|
1164
|
-
Cancel the subscription via :meth:`unsubscribe_command
|
|
1211
|
+
Cancel the subscription via :meth:`unsubscribe_command`, or
|
|
1212
|
+
:meth:`release_subscription` from a ``finally``.
|
|
1165
1213
|
"""
|
|
1166
1214
|
if not self._state.is_ready:
|
|
1167
1215
|
raise HomeAssistantConnectionError("WebSocket not authenticated")
|
|
@@ -1183,20 +1231,34 @@ class HomeAssistantWebSocketClient:
|
|
|
1183
1231
|
except BaseException:
|
|
1184
1232
|
# Cancellation mid-send: skips the clause above and would leave BOTH
|
|
1185
1233
|
# the queue and the pending future registered — the queue never
|
|
1186
|
-
# drains and buffers every later event for this id forever.
|
|
1234
|
+
# drains and buffers every later event for this id forever. The
|
|
1235
|
+
# frame may already be on the wire, so release it on Home
|
|
1236
|
+
# Assistant's side too, as subscribe_events does.
|
|
1187
1237
|
self._state.unregister_subscription_queue(message_id)
|
|
1188
1238
|
self.cancel_pending_response(message_id)
|
|
1239
|
+
self._state.mark_abandoned_subscription(message_id)
|
|
1240
|
+
await self._run_cleanup(
|
|
1241
|
+
self._release_abandoned_subscription(message_id),
|
|
1242
|
+
f"abandoned {command_type}({message_id})",
|
|
1243
|
+
)
|
|
1189
1244
|
raise
|
|
1190
1245
|
|
|
1191
1246
|
try:
|
|
1192
|
-
response = await asyncio.wait_for(result_future, timeout=
|
|
1247
|
+
response = await asyncio.wait_for(result_future, timeout=wait_timeout)
|
|
1193
1248
|
except BaseException:
|
|
1194
1249
|
# A cancelled caller leaks the pending future AND the subscription
|
|
1195
1250
|
# queue, which keeps accumulating events with no reader. The
|
|
1196
|
-
#
|
|
1197
|
-
#
|
|
1251
|
+
# command is on the wire, so Home Assistant may have registered
|
|
1252
|
+
# the subscription: the caller never receives its id, so releasing
|
|
1253
|
+
# it is this method's job. The original exception re-raises
|
|
1254
|
+
# unchanged.
|
|
1198
1255
|
self._state.unregister_subscription_queue(message_id)
|
|
1199
1256
|
self.cancel_pending_response(message_id)
|
|
1257
|
+
self._state.mark_abandoned_subscription(message_id)
|
|
1258
|
+
await self._run_cleanup(
|
|
1259
|
+
self._release_abandoned_subscription(message_id),
|
|
1260
|
+
f"abandoned {command_type}({message_id})",
|
|
1261
|
+
)
|
|
1200
1262
|
raise
|
|
1201
1263
|
|
|
1202
1264
|
if response.get("type") == "result" and response.get("success"):
|
|
@@ -1208,6 +1270,65 @@ class HomeAssistantWebSocketClient:
|
|
|
1208
1270
|
f"subscribe_command({command_type!r}) failed: {error_msg}", error_code
|
|
1209
1271
|
)
|
|
1210
1272
|
|
|
1273
|
+
async def release_subscription(self, subscription_id: int) -> None:
|
|
1274
|
+
"""Release a :meth:`subscribe_command` subscription from a ``finally``.
|
|
1275
|
+
|
|
1276
|
+
Unlike :meth:`unsubscribe_command` this never raises and survives the
|
|
1277
|
+
caller's cancellation: a failed or timed-out release must not replace
|
|
1278
|
+
the result the caller already has, and a cancelled caller must still
|
|
1279
|
+
release, or Home Assistant keeps the subscription for the life of the
|
|
1280
|
+
socket.
|
|
1281
|
+
"""
|
|
1282
|
+
self._state.unregister_subscription_queue(subscription_id)
|
|
1283
|
+
socket = self.websocket
|
|
1284
|
+
if await self._run_cleanup(
|
|
1285
|
+
self._release_abandoned_subscription(subscription_id),
|
|
1286
|
+
f"subscription {subscription_id}",
|
|
1287
|
+
):
|
|
1288
|
+
return
|
|
1289
|
+
# The deadline stopped the release before ``unsubscribe_events`` went
|
|
1290
|
+
# out (the send lock was held throughout), and the subscription's ack
|
|
1291
|
+
# has already been consumed, so nothing else will release it.
|
|
1292
|
+
task = asyncio.ensure_future(self._finish_release(subscription_id, socket))
|
|
1293
|
+
self._late_releases.add(task)
|
|
1294
|
+
task.add_done_callback(self._late_release_done)
|
|
1295
|
+
|
|
1296
|
+
def _late_release_done(self, task: asyncio.Task[None]) -> None:
|
|
1297
|
+
"""Collect cleanup outcomes while keeping unexpected failures visible."""
|
|
1298
|
+
self._late_releases.discard(task)
|
|
1299
|
+
if task.cancelled():
|
|
1300
|
+
return
|
|
1301
|
+
error = task.exception()
|
|
1302
|
+
if isinstance(error, HomeAssistantCommandTimeout) and self._state.is_ready:
|
|
1303
|
+
logger.warning(
|
|
1304
|
+
"Background subscription release timed out; could not confirm "
|
|
1305
|
+
"subscription cleanup in Home Assistant"
|
|
1306
|
+
)
|
|
1307
|
+
elif isinstance(
|
|
1308
|
+
error,
|
|
1309
|
+
(
|
|
1310
|
+
HomeAssistantConnectionError,
|
|
1311
|
+
HomeAssistantCommandTimeout,
|
|
1312
|
+
websockets.exceptions.ConnectionClosed,
|
|
1313
|
+
),
|
|
1314
|
+
):
|
|
1315
|
+
logger.debug("Background subscription release failed: %s", error)
|
|
1316
|
+
elif error is not None:
|
|
1317
|
+
logger.error(
|
|
1318
|
+
"Unexpected background subscription release failure",
|
|
1319
|
+
exc_info=(type(error), error, error.__traceback__),
|
|
1320
|
+
)
|
|
1321
|
+
|
|
1322
|
+
async def _finish_release(self, subscription_id: int, socket: Any) -> None:
|
|
1323
|
+
"""Complete a release the cleanup deadline cut short, on the same socket.
|
|
1324
|
+
|
|
1325
|
+
A reconnect drops the subscription with the old socket and restarts
|
|
1326
|
+
message ids, so on a new socket the id could name an unrelated one.
|
|
1327
|
+
"""
|
|
1328
|
+
if self.websocket is not socket:
|
|
1329
|
+
return
|
|
1330
|
+
await self._release_abandoned_subscription(subscription_id)
|
|
1331
|
+
|
|
1211
1332
|
async def unsubscribe_command(
|
|
1212
1333
|
self,
|
|
1213
1334
|
subscription_id: int,
|
|
@@ -900,8 +900,8 @@ class HomeAssistantSmartMCPServer:
|
|
|
900
900
|
# which measures both sides at test time.
|
|
901
901
|
#
|
|
902
902
|
# It was the largest full description in the GATEWAY catalog this was
|
|
903
|
-
# measured against, not in the repo:
|
|
904
|
-
#
|
|
903
|
+
# measured against, not in the repo: ha_get_system_health (5811) is
|
|
904
|
+
# larger and unmapped.
|
|
905
905
|
# The reduction is smaller than pure compression would give because
|
|
906
906
|
# the safety content below is kept inline. The routing matrix STAYS —
|
|
907
907
|
# the `action` parameter's own Field description says "Valid (scope,
|
{ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/settings_ui/locales/az.json
RENAMED
|
@@ -700,7 +700,7 @@
|
|
|
700
700
|
},
|
|
701
701
|
"ha_eval_template": {
|
|
702
702
|
"title": "Şablonu emal et",
|
|
703
|
-
"description": "Home Assistant
|
|
703
|
+
"description": "Home Assistant-də Jinja2 şablonunun render edilməsini və ya avtomatlaşdırma şərtinin yoxlanılmasını icra edin."
|
|
704
704
|
},
|
|
705
705
|
"ha_get_app": {
|
|
706
706
|
"title": "Tətbiqləri (əlavələri) al",
|
{ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/settings_ui/locales/cs.json
RENAMED
|
@@ -669,7 +669,7 @@
|
|
|
669
669
|
},
|
|
670
670
|
"ha_eval_template": {
|
|
671
671
|
"title": "Vyhodnotit šablonu",
|
|
672
|
-
"description": "
|
|
672
|
+
"description": "Provede vykreslení šablony Jinja2 nebo kontrolu podmínki automatizace v Home Assistant."
|
|
673
673
|
},
|
|
674
674
|
"ha_get_app": {
|
|
675
675
|
"title": "Získat aplikace (doplňky)",
|
{ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/settings_ui/locales/de.json
RENAMED
|
@@ -700,7 +700,7 @@
|
|
|
700
700
|
},
|
|
701
701
|
"ha_eval_template": {
|
|
702
702
|
"title": "Template auswerten",
|
|
703
|
-
"description": "
|
|
703
|
+
"description": "Führe ein Jinja2-Template-Rendering oder eine Automatisierungs-Bedingungsprüfung in Home Assistant aus."
|
|
704
704
|
},
|
|
705
705
|
"ha_get_app": {
|
|
706
706
|
"title": "Apps (Add-ons) abrufen",
|
{ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/settings_ui/locales/eo.json
RENAMED
|
@@ -669,7 +669,7 @@
|
|
|
669
669
|
},
|
|
670
670
|
"ha_eval_template": {
|
|
671
671
|
"title": "Taksi Ŝablonon",
|
|
672
|
-
"description": "
|
|
672
|
+
"description": "Plenumi Jinja2-ŝablonan rendorigon, aŭ aŭtomatigan kondiĉan kontrolon, en Home Assistant."
|
|
673
673
|
},
|
|
674
674
|
"ha_get_app": {
|
|
675
675
|
"title": "Akiri programojn (aldonaĵojn)",
|
{ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/settings_ui/locales/es.json
RENAMED
|
@@ -700,7 +700,7 @@
|
|
|
700
700
|
},
|
|
701
701
|
"ha_eval_template": {
|
|
702
702
|
"title": "Evaluar plantilla",
|
|
703
|
-
"description": "
|
|
703
|
+
"description": "Ejecuta una renderización de plantilla Jinja2, o una comprobación de condición de automatización, en Home Assistant."
|
|
704
704
|
},
|
|
705
705
|
"ha_get_app": {
|
|
706
706
|
"title": "Obtener Apps (add-ons)",
|
{ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/settings_ui/locales/fr.json
RENAMED
|
@@ -700,7 +700,7 @@
|
|
|
700
700
|
},
|
|
701
701
|
"ha_eval_template": {
|
|
702
702
|
"title": "Évaluer le modèle",
|
|
703
|
-
"description": "
|
|
703
|
+
"description": "Exécute le rendu d'un modèle Jinja2 ou une vérification de condition d'automatisation dans Home Assistant."
|
|
704
704
|
},
|
|
705
705
|
"ha_get_app": {
|
|
706
706
|
"title": "Obtenir des applications (add-ons)",
|
{ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/settings_ui/locales/it.json
RENAMED
|
@@ -700,7 +700,7 @@
|
|
|
700
700
|
},
|
|
701
701
|
"ha_eval_template": {
|
|
702
702
|
"title": "Valuta un template",
|
|
703
|
-
"description": "
|
|
703
|
+
"description": "Esegue il rendering di un template Jinja2 o un controllo delle condizioni di un'automazione in Home Assistant."
|
|
704
704
|
},
|
|
705
705
|
"ha_get_app": {
|
|
706
706
|
"title": "Ottieni app (componenti aggiuntivi)",
|
{ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/settings_ui/locales/nl.json
RENAMED
|
@@ -669,7 +669,7 @@
|
|
|
669
669
|
},
|
|
670
670
|
"ha_eval_template": {
|
|
671
671
|
"title": "Evalueer Sjabloon",
|
|
672
|
-
"description": "
|
|
672
|
+
"description": "Voer een Jinja2-sjabloonweergave of een automatiseringsvoorwaardecontrole uit in Home Assistant."
|
|
673
673
|
},
|
|
674
674
|
"ha_get_app": {
|
|
675
675
|
"title": "Apps ophalen (add-ons)",
|
{ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/settings_ui/locales/pl.json
RENAMED
|
@@ -669,7 +669,7 @@
|
|
|
669
669
|
},
|
|
670
670
|
"ha_eval_template": {
|
|
671
671
|
"title": "Oceń szablon",
|
|
672
|
-
"description": "
|
|
672
|
+
"description": "Wykonaj renderowanie szablonu Jinja2 lub sprawdź warunek automatyzacji w Home Assistant."
|
|
673
673
|
},
|
|
674
674
|
"ha_get_app": {
|
|
675
675
|
"title": "Pobierz aplikacje (dodatki)",
|
{ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/settings_ui/locales/ru.json
RENAMED
|
@@ -700,7 +700,7 @@
|
|
|
700
700
|
},
|
|
701
701
|
"ha_eval_template": {
|
|
702
702
|
"title": "Вычислить шаблон",
|
|
703
|
-
"description": "
|
|
703
|
+
"description": "Выполнить рендеринг шаблона Jinja2 или проверку условия автоматизации в Home Assistant."
|
|
704
704
|
},
|
|
705
705
|
"ha_get_app": {
|
|
706
706
|
"title": "Получить приложения (аддоны)",
|
{ha_mcp_dev-8.5.0.dev2734 → ha_mcp_dev-8.5.0.dev2740}/src/ha_mcp/settings_ui/locales/sv.json
RENAMED
|
@@ -669,7 +669,7 @@
|
|
|
669
669
|
},
|
|
670
670
|
"ha_eval_template": {
|
|
671
671
|
"title": "Utvärdera Mall",
|
|
672
|
-
"description": "
|
|
672
|
+
"description": "Kör en Jinja2-mallrendering eller en automationsvillkorskontroll i Home Assistant."
|
|
673
673
|
},
|
|
674
674
|
"ha_get_app": {
|
|
675
675
|
"title": "Hämta appar (tillägg)",
|