ha-mcp-dev 8.5.0.dev2742__tar.gz → 8.5.0.dev2745__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.dev2742/src/ha_mcp_dev.egg-info → ha_mcp_dev-8.5.0.dev2745}/PKG-INFO +1 -1
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/pyproject.toml +1 -1
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/server.py +25 -7
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/entity_registration.py +5 -3
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/tools_addons.py +1 -1
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/tools_config_automations.py +188 -63
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/tools_config_scenes.py +164 -16
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/tools_config_scripts.py +125 -2
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/tools_entities.py +9 -7
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/tools_integrations.py +127 -21
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/tools_logs.py +1 -1
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/tools_search.py +5 -1
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/tools_service.py +32 -32
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/tools_system.py +5 -1
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/tools_updates.py +117 -6
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/util_helpers.py +35 -13
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745/src/ha_mcp_dev.egg-info}/PKG-INFO +1 -1
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/LICENSE +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/MANIFEST.in +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/README.md +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/setup.cfg +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/__main__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_pypi_marker +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_rich_compat.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/requirements.txt +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/client.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/server.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_vendor/websockets/version.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/_version.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/auth/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/auth/consent_form.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/auth/oidc_compat.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/auth/provider.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/backup_manager.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/browser_landing.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/client/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/client/rest_client.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/client/supervisor_client.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/client/websocket_client.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/client/websocket_listener.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/config.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/errors.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/ha_request_queue.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/hacs_auto_refresh.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/http_transport.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/llm_exposure.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/log_filters.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/policy/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/policy/approval_queue.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/policy/decision_pin.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/policy/decisions.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/policy/editing.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/policy/evaluator.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/policy/events.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/policy/handlers.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/policy/middleware.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/policy/model.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/policy/persistence.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/policy/value_sources.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/py.typed +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/read_only.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/redaction.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/renamed_tools.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/resources/skills-vendor/.github/pull_request_template.md +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/resources/skills-vendor/evals/area-target-over-entity-list/case.yaml +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/resources/skills-vendor/evals/arrive-home-automation/case.yaml +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/resources/skills-vendor/evals/assist-shortcut-card/case.yaml +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/resources/skills-vendor/evals/avg-temperature/case.yaml +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/resources/skills-vendor/evals/backup-deletion-confirmation/case.yaml +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/resources/skills-vendor/evals/blueprint-authoring/case.yaml +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/resources/skills-vendor/evals/button-event-entity/case.yaml +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/resources/skills-vendor/evals/device-id-trigger-migration/case.yaml +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/resources/skills-vendor/evals/helper-flow-fields-not-platform-yaml/case.yaml +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/resources/skills-vendor/evals/media-player-song/case.yaml +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/resources/skills-vendor/evals/motion-light-automation-mode/case.yaml +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/resources/skills-vendor/evals/rename-entity-impact-analysis/case.yaml +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/resources/skills-vendor/evals/template-attributes-yaml-exception/case.yaml +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/resources/skills-vendor/evals/timer-finished-automation/case.yaml +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/resources/skills-vendor/evals/vacuum-last-clean/case.yaml +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/resources/skills-vendor/scripts/check_eval_cases.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/settings_ui/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/settings_ui/_i18n.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/settings_ui/_persistence.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/settings_ui/_theme.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/settings_ui/locales/README.md +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/settings_ui/locales/az.json +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/settings_ui/locales/de.json +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/settings_ui/locales/en.json +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/settings_ui/locales/es.json +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/settings_ui/locales/it.json +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/settings_ui/settings.css +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/settings_ui/settings.html +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/settings_ui/settings.js +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/smoke_test.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/strict_bps.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tool_dispatch.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/auto_backup.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/backup.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/best_practice_checker.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/best_practice_result.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/best_practice_variables.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/blueprint_sources.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/blueprint_write.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/bulk_selector.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/component_api.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/component_config_entries.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/component_config_reads.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/component_devices.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/component_registries.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/config_entry_flow.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/config_entry_identity.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/device_control.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/error_log_parsing.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/hacs_registration.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/helpers.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/log_common.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/log_sources.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/log_sources_fault.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/radio/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/radio/base.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/radio/matter.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/radio/thread.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/radio/zigbee.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/radio/zwave.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/reference_validator.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/registry.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/scene_discovery.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/smart_search/_base.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/smart_search/_config.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/tools_areas.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/tools_blueprints.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/tools_bug_report.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/tools_calendar.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/tools_camera.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/tools_categories.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/tools_code.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/tools_dev.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/tools_energy.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/tools_filesystem.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/tools_groups.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/tools_hacs.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/tools_history.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/tools_labels.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/tools_radio.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/tools_registry.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/tools_resources.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/tools_security_policy.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/tools_services.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/tools_themes.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/tools_todo.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/tools_traces.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/tools_utility.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/tools_zones.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/validation_middleware.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/transforms/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/transforms/categorized_search.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/transforms/component_search.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/transforms/write_tool_note.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/transport_security.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/update_check.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/utils/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/utils/config_hash.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/utils/config_write_lock.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/utils/dashboard_patch.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/utils/data_paths.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/utils/domain_handlers.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/utils/entity_membership.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/utils/fuzzy_search.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/utils/mcp_client_host.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/utils/operation_manager.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/utils/python_sandbox.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/utils/registry_update_lock.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/utils/skill_loader.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/utils/usage_logger.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/visibility/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/visibility/enforcement.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/visibility/model.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/visibility/persistence.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/visibility/resolver.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp_dev.egg-info/SOURCES.txt +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/tests/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/tests/test_constants.py +0 -0
- {ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/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.dev2745"
|
|
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
|
|
@@ -662,11 +662,23 @@ class HomeAssistantSmartMCPServer:
|
|
|
662
662
|
"ha_config_set_automation": (
|
|
663
663
|
"create update modify edit automation triggers conditions actions "
|
|
664
664
|
"new automation write save take control blueprint detach "
|
|
665
|
-
"unlink standalone convert"
|
|
665
|
+
"unlink standalone convert enable disable turn on off run trigger now"
|
|
666
666
|
),
|
|
667
667
|
"ha_config_set_script": (
|
|
668
668
|
"create update modify edit script sequence actions new script write "
|
|
669
|
-
"save take control blueprint detach unlink standalone convert"
|
|
669
|
+
"save take control blueprint detach unlink standalone convert "
|
|
670
|
+
"run start stop execute"
|
|
671
|
+
),
|
|
672
|
+
"ha_config_set_scene": (
|
|
673
|
+
"create update modify edit scene entities snapshot activate apply turn on"
|
|
674
|
+
),
|
|
675
|
+
"ha_manage_updates": (
|
|
676
|
+
"update updates install skip firmware core os repair repairs issue "
|
|
677
|
+
"ignore dismiss unignore"
|
|
678
|
+
),
|
|
679
|
+
"ha_set_integration": (
|
|
680
|
+
"integration config entry enable disable add options reconfigure "
|
|
681
|
+
"log level debug logging"
|
|
670
682
|
),
|
|
671
683
|
"ha_config_set_yaml": (
|
|
672
684
|
"edit yaml configuration.yaml packages template sensor "
|
|
@@ -743,7 +755,9 @@ class HomeAssistantSmartMCPServer:
|
|
|
743
755
|
"to convert a blueprint-backed automation into an editable "
|
|
744
756
|
"standalone one (the UI's Take control action). Omit "
|
|
745
757
|
"`identifier` to create a new automation. Reusing an identifier targets "
|
|
746
|
-
"the same automation; changing its alias requires config_hash from a prior read
|
|
758
|
+
"the same automation; changing its alias requires config_hash from a prior read. "
|
|
759
|
+
"`enabled` turns it on or off and `run_actions` runs it now, with a "
|
|
760
|
+
"write or alone with `identifier`.\n\n"
|
|
747
761
|
"For schema details, examples, and native-vs-template "
|
|
748
762
|
"guidance, see ha_get_skill_guide or your locally "
|
|
749
763
|
"installed skills."
|
|
@@ -763,7 +777,8 @@ class HomeAssistantSmartMCPServer:
|
|
|
763
777
|
"`config_hash` from ha_config_get_script), or "
|
|
764
778
|
"`take_control_of_blueprint` to convert a blueprint-backed "
|
|
765
779
|
"script into an editable standalone one. `script_id` names "
|
|
766
|
-
"the script in every mode
|
|
780
|
+
"the script in every mode. `run` ('start' / 'stop'), used alone "
|
|
781
|
+
"with `script_id`, starts or stops the script.\n\n"
|
|
767
782
|
"For schema details and examples, see "
|
|
768
783
|
"ha_get_skill_guide or your locally installed skills."
|
|
769
784
|
),
|
|
@@ -782,7 +797,8 @@ class HomeAssistantSmartMCPServer:
|
|
|
782
797
|
"Create or update a Home Assistant scene.\n\n"
|
|
783
798
|
"Supports two modes: full `config` replacement, or surgical "
|
|
784
799
|
"`python_transform` on an existing scene (requires "
|
|
785
|
-
"`config_hash`). `scene_id` names the scene in both modes
|
|
800
|
+
"`config_hash`). `scene_id` names the scene in both modes. "
|
|
801
|
+
"`activate` activates the scene, with a write or alone.\n\n"
|
|
786
802
|
"For schema details and examples, see "
|
|
787
803
|
"ha_get_skill_guide or your locally installed skills."
|
|
788
804
|
),
|
|
@@ -846,8 +862,10 @@ class HomeAssistantSmartMCPServer:
|
|
|
846
862
|
"ha_get_skill_guide or your locally installed skills."
|
|
847
863
|
),
|
|
848
864
|
"ha_call_service": (
|
|
849
|
-
"
|
|
850
|
-
"
|
|
865
|
+
"Call any Home Assistant service or one-shot WebSocket command: "
|
|
866
|
+
"the catch-all escape hatch. Prefer a dedicated tool when one "
|
|
867
|
+
"covers the job (automations, scripts, scenes, apps, updates and "
|
|
868
|
+
"repairs, integration log levels). Calls `<domain>.<service>` "
|
|
851
869
|
"(e.g., light.turn_on, climate.set_temperature). Use "
|
|
852
870
|
"ha_search to find entity IDs and ha_get_state "
|
|
853
871
|
"to read current values before changing them.\n\n"
|
{ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/entity_registration.py
RENAMED
|
@@ -82,9 +82,11 @@ async def resolve_entity_id_after_write(
|
|
|
82
82
|
An empty registry read can precede asynchronous registration even inside
|
|
83
83
|
the component. Retry against one deadline, checking component availability
|
|
84
84
|
on every attempt. A positive budget includes in-flight lookups and sleeps;
|
|
85
|
-
zero requests one lookup without a time limit, for test fixtures
|
|
86
|
-
|
|
87
|
-
|
|
85
|
+
zero requests one lookup without a time limit, for test fixtures and for
|
|
86
|
+
callers that need an existing entity without waiting (a standalone script
|
|
87
|
+
run). Known API failures retain the best-effort fallback. Errors escaping
|
|
88
|
+
the component adapter propagate unless listed below; cancellation always
|
|
89
|
+
propagates.
|
|
88
90
|
``fallback_entity_id`` overrides the constructed ID on failure; registry
|
|
89
91
|
matching always uses the storage key.
|
|
90
92
|
|
|
@@ -1302,7 +1302,7 @@ def _validate_addon_access(
|
|
|
1302
1302
|
ErrorCode.SERVICE_CALL_FAILED,
|
|
1303
1303
|
f"App (add-on) '{addon_name}' is not running (state: {addon.get('state')})",
|
|
1304
1304
|
suggestions=[
|
|
1305
|
-
f"Start the app (add-on) first with:
|
|
1305
|
+
f"Start the app (add-on) first with: ha_manage_app(slug='{slug}', action='start')",
|
|
1306
1306
|
],
|
|
1307
1307
|
context={"slug": slug, "state": addon.get("state")},
|
|
1308
1308
|
)
|
{ha_mcp_dev-8.5.0.dev2742 → ha_mcp_dev-8.5.0.dev2745}/src/ha_mcp/tools/tools_config_automations.py
RENAMED
|
@@ -60,10 +60,11 @@ from .util_helpers import (
|
|
|
60
60
|
attach_skill_content,
|
|
61
61
|
augment_error_dict_with_skill_content,
|
|
62
62
|
augment_tool_error_with_skill_content,
|
|
63
|
-
automation_reload_waiter,
|
|
64
63
|
coerce_to_list,
|
|
64
|
+
config_reload_waiter,
|
|
65
65
|
fetch_entity_category,
|
|
66
66
|
merge_validation_meta,
|
|
67
|
+
note_reload_outcome,
|
|
67
68
|
parse_json_param,
|
|
68
69
|
wait_for_automation_entity_by_unique_id,
|
|
69
70
|
wait_for_entity_registered,
|
|
@@ -338,9 +339,9 @@ def _validate_automation_identifier(identifier: str | None) -> None:
|
|
|
338
339
|
|
|
339
340
|
|
|
340
341
|
def _skip_automation_runtime_backup(kwargs: dict[str, Any]) -> bool:
|
|
341
|
-
"""Skip config snapshots for runtime-only enabled
|
|
342
|
+
"""Skip config snapshots for runtime-only calls (enabled / run_actions)."""
|
|
342
343
|
return (
|
|
343
|
-
kwargs.get("enabled") is not None
|
|
344
|
+
(kwargs.get("enabled") is not None or bool(kwargs.get("run_actions")))
|
|
344
345
|
and kwargs.get("config") is None
|
|
345
346
|
and kwargs.get("python_transform") is None
|
|
346
347
|
and not kwargs.get("take_control_of_blueprint")
|
|
@@ -370,10 +371,10 @@ async def _resolve_post_write_automation_entity(
|
|
|
370
371
|
return entity_id
|
|
371
372
|
|
|
372
373
|
|
|
373
|
-
async def
|
|
374
|
+
async def _resolve_runtime_target(
|
|
374
375
|
client: Any, identifier: str, response: dict[str, Any]
|
|
375
376
|
) -> str | None:
|
|
376
|
-
"""Resolve the entity to receive a runtime enabled
|
|
377
|
+
"""Resolve the entity to receive a runtime change (enabled / run_actions)."""
|
|
377
378
|
if identifier.startswith("automation."):
|
|
378
379
|
return identifier
|
|
379
380
|
# A config write reloads the automation and replaces its entity when the
|
|
@@ -384,23 +385,6 @@ async def _resolve_enabled_target(
|
|
|
384
385
|
)
|
|
385
386
|
|
|
386
387
|
|
|
387
|
-
def _note_reload_outcome(
|
|
388
|
-
result: dict[str, Any], reloaded: bool | None, enabled: bool | None
|
|
389
|
-
) -> None:
|
|
390
|
-
"""Warn when an enabled change could not be ordered after the reload."""
|
|
391
|
-
if enabled is None or reloaded:
|
|
392
|
-
return
|
|
393
|
-
reason = (
|
|
394
|
-
"did not confirm the automation reload"
|
|
395
|
-
if reloaded is False
|
|
396
|
-
else "could not be watched for the automation reload (no WebSocket)"
|
|
397
|
-
)
|
|
398
|
-
result.setdefault("warnings", []).append(
|
|
399
|
-
f"Home Assistant {reason}; the requested enabled state may be "
|
|
400
|
-
"reverted when the reload completes."
|
|
401
|
-
)
|
|
402
|
-
|
|
403
|
-
|
|
404
388
|
def _sync_post_write_automation_result(
|
|
405
389
|
response: dict[str, Any], entity_id: str | None
|
|
406
390
|
) -> None:
|
|
@@ -410,6 +394,34 @@ def _sync_post_write_automation_result(
|
|
|
410
394
|
response.pop("entity_not_verified", None)
|
|
411
395
|
|
|
412
396
|
|
|
397
|
+
def _run_actions_once_reloaded(
|
|
398
|
+
result: dict[str, Any],
|
|
399
|
+
reloaded: bool | None,
|
|
400
|
+
run_actions: bool,
|
|
401
|
+
identifier: str | None,
|
|
402
|
+
) -> bool:
|
|
403
|
+
"""Keep run_actions after a write only once the reload is confirmed.
|
|
404
|
+
|
|
405
|
+
Unlike ``enabled``, a run cannot be corrected afterwards: before the reload
|
|
406
|
+
it would run the previous actions, or hit no entity at all.
|
|
407
|
+
"""
|
|
408
|
+
if not run_actions or reloaded:
|
|
409
|
+
return run_actions
|
|
410
|
+
result["actions_triggered"] = False
|
|
411
|
+
result.setdefault("warnings", []).append(
|
|
412
|
+
"Automation was written, but its actions were not run: the reload the "
|
|
413
|
+
"write scheduled could not be confirmed, so they could have run the "
|
|
414
|
+
"previous version. Run them with ha_config_set_automation("
|
|
415
|
+
f"identifier='{identifier or '<automation id>'}', run_actions=True)."
|
|
416
|
+
)
|
|
417
|
+
return False
|
|
418
|
+
|
|
419
|
+
|
|
420
|
+
# Standalone runtime calls raise on a service failure; after a config write the
|
|
421
|
+
# same failure is a partial-success warning because the write already landed.
|
|
422
|
+
_STANDALONE_RUNTIME_ACTIONS = ("set_enabled", "run_actions")
|
|
423
|
+
|
|
424
|
+
|
|
413
425
|
def _reject_enabled_in_config(config: Any) -> None:
|
|
414
426
|
"""Reject the runtime-only ``enabled`` key in a stored config body."""
|
|
415
427
|
if isinstance(config, dict) and "enabled" in config:
|
|
@@ -740,6 +752,18 @@ class AutomationConfigTools:
|
|
|
740
752
|
default=None,
|
|
741
753
|
),
|
|
742
754
|
] = None,
|
|
755
|
+
run_actions: Annotated[
|
|
756
|
+
bool,
|
|
757
|
+
Field(
|
|
758
|
+
description=(
|
|
759
|
+
"Run the automation's actions now, skipping its triggers and "
|
|
760
|
+
"conditions (automation.trigger, the UI's Run actions). Applied "
|
|
761
|
+
"after `enabled` and after any config write. Can be used "
|
|
762
|
+
"standalone with identifier and no config."
|
|
763
|
+
),
|
|
764
|
+
default=False,
|
|
765
|
+
),
|
|
766
|
+
] = False,
|
|
743
767
|
MandatoryBPS: Annotated[
|
|
744
768
|
bool,
|
|
745
769
|
Field(default=True),
|
|
@@ -791,6 +815,7 @@ class AutomationConfigTools:
|
|
|
791
815
|
- From a blueprint: ha_config_set_automation(config={"alias": "Motion Light Kitchen", "use_blueprint": {"path": "homeassistant/motion_light.yaml", "input": {"motion_entity": "binary_sensor.kitchen_motion", "light_target": {"entity_id": "light.kitchen"}}}})
|
|
792
816
|
- Update: current = ha_config_get_automation(identifier="automation.x"); ha_config_set_automation(identifier="automation.x", config_hash=current["config_hash"], config={...})
|
|
793
817
|
- Disable: ha_config_set_automation(identifier="automation.x", enabled=False)
|
|
818
|
+
- Run now: ha_config_set_automation(identifier="automation.x", run_actions=True)
|
|
794
819
|
- Take control: ha_config_set_automation(identifier="automation.x", take_control_of_blueprint=True)
|
|
795
820
|
|
|
796
821
|
TAKE CONTROL is one-way: later blueprint edits stop reaching the
|
|
@@ -833,22 +858,23 @@ class AutomationConfigTools:
|
|
|
833
858
|
# wins, so it can still lock against a config it read itself.
|
|
834
859
|
config_hash = config_hash or taken.config_hash
|
|
835
860
|
|
|
836
|
-
|
|
861
|
+
runtime_only_response = await self._maybe_set_runtime_only(
|
|
837
862
|
identifier,
|
|
838
863
|
config,
|
|
839
864
|
python_transform,
|
|
840
865
|
category,
|
|
841
866
|
enabled,
|
|
867
|
+
run_actions,
|
|
842
868
|
wait,
|
|
843
869
|
)
|
|
844
|
-
if
|
|
870
|
+
if runtime_only_response is not None:
|
|
845
871
|
attach_skill_content(
|
|
846
|
-
|
|
872
|
+
runtime_only_response,
|
|
847
873
|
MandatoryBPS=MandatoryBPS,
|
|
848
874
|
canonical_files=_AUTOMATION_SKILL_FILES,
|
|
849
875
|
referenced_files=bp_warnings.referenced_files,
|
|
850
876
|
)
|
|
851
|
-
return
|
|
877
|
+
return runtime_only_response
|
|
852
878
|
|
|
853
879
|
if python_transform is not None:
|
|
854
880
|
response, bp_warnings = await self._run_python_transform(
|
|
@@ -859,6 +885,7 @@ class AutomationConfigTools:
|
|
|
859
885
|
MandatoryBPS,
|
|
860
886
|
enabled,
|
|
861
887
|
wait,
|
|
888
|
+
run_actions=run_actions,
|
|
862
889
|
)
|
|
863
890
|
return response
|
|
864
891
|
|
|
@@ -933,6 +960,7 @@ class AutomationConfigTools:
|
|
|
933
960
|
resolved_id,
|
|
934
961
|
detached_blueprint,
|
|
935
962
|
enabled,
|
|
963
|
+
run_actions=run_actions,
|
|
936
964
|
)
|
|
937
965
|
|
|
938
966
|
except ToolError as te:
|
|
@@ -1061,17 +1089,20 @@ class AutomationConfigTools:
|
|
|
1061
1089
|
)
|
|
1062
1090
|
return TakenControl(taken, blueprint_path, fetched_hash)
|
|
1063
1091
|
|
|
1064
|
-
async def
|
|
1092
|
+
async def _maybe_set_runtime_only(
|
|
1065
1093
|
self,
|
|
1066
1094
|
identifier: str | None,
|
|
1067
1095
|
config: Any,
|
|
1068
1096
|
python_transform: str | None,
|
|
1069
1097
|
category: str | None,
|
|
1070
1098
|
enabled: bool | None,
|
|
1099
|
+
run_actions: bool,
|
|
1071
1100
|
wait: bool,
|
|
1072
1101
|
) -> dict[str, Any] | None:
|
|
1073
|
-
"""Handle a standalone runtime
|
|
1074
|
-
if enabled is None
|
|
1102
|
+
"""Handle a standalone runtime request (enabled / run_actions), if any."""
|
|
1103
|
+
if (enabled is None and not run_actions) or (
|
|
1104
|
+
config is not None or python_transform is not None
|
|
1105
|
+
):
|
|
1075
1106
|
return None
|
|
1076
1107
|
if category is not None:
|
|
1077
1108
|
raise_tool_error(
|
|
@@ -1080,27 +1111,36 @@ class AutomationConfigTools:
|
|
|
1080
1111
|
"category requires a config update",
|
|
1081
1112
|
suggestions=[
|
|
1082
1113
|
"Pass config or python_transform when assigning a category",
|
|
1083
|
-
"Omit category for a standalone enabled
|
|
1114
|
+
"Omit category for a standalone enabled or run_actions call",
|
|
1084
1115
|
],
|
|
1085
|
-
context={"action": "
|
|
1116
|
+
context={"action": "set_runtime", "category": category},
|
|
1086
1117
|
)
|
|
1087
1118
|
)
|
|
1088
|
-
return await self.
|
|
1119
|
+
return await self._set_runtime_only(
|
|
1120
|
+
identifier, enabled, wait, run_actions=run_actions
|
|
1121
|
+
)
|
|
1089
1122
|
|
|
1090
|
-
async def
|
|
1091
|
-
self,
|
|
1123
|
+
async def _set_runtime_only(
|
|
1124
|
+
self,
|
|
1125
|
+
identifier: str | None,
|
|
1126
|
+
enabled: bool | None,
|
|
1127
|
+
wait: bool,
|
|
1128
|
+
*,
|
|
1129
|
+
run_actions: bool = False,
|
|
1092
1130
|
) -> dict[str, Any]:
|
|
1093
|
-
"""
|
|
1131
|
+
"""Apply enabled and/or run_actions to an existing automation, no config."""
|
|
1132
|
+
action = "set_enabled" if enabled is not None else "run_actions"
|
|
1094
1133
|
if not identifier:
|
|
1095
1134
|
raise_tool_error(
|
|
1096
1135
|
create_error_response(
|
|
1097
1136
|
ErrorCode.VALIDATION_INVALID_PARAMETER,
|
|
1098
|
-
"identifier is required when setting enabled
|
|
1137
|
+
"identifier is required when setting enabled or run_actions "
|
|
1138
|
+
"without config",
|
|
1099
1139
|
suggestions=[
|
|
1100
1140
|
"Pass an automation entity_id or unique_id",
|
|
1101
1141
|
"Use ha_search(domain_filter='automation') to find automations",
|
|
1102
1142
|
],
|
|
1103
|
-
context={"action":
|
|
1143
|
+
context={"action": action, "enabled": enabled},
|
|
1104
1144
|
)
|
|
1105
1145
|
)
|
|
1106
1146
|
entity_id = await self._resolve_automation_entity_id_strict(identifier)
|
|
@@ -1108,19 +1148,20 @@ class AutomationConfigTools:
|
|
|
1108
1148
|
await self._raise_automation_not_found(identifier)
|
|
1109
1149
|
response: dict[str, Any] = {
|
|
1110
1150
|
"success": True,
|
|
1111
|
-
"action":
|
|
1151
|
+
"action": action,
|
|
1112
1152
|
"automation_id": entity_id,
|
|
1113
1153
|
}
|
|
1114
|
-
await self.
|
|
1154
|
+
await self._apply_runtime_state(
|
|
1115
1155
|
response,
|
|
1116
1156
|
entity_id,
|
|
1117
1157
|
enabled,
|
|
1118
1158
|
wait,
|
|
1119
1159
|
identifier=identifier,
|
|
1160
|
+
run_actions=run_actions,
|
|
1120
1161
|
)
|
|
1121
1162
|
return response
|
|
1122
1163
|
|
|
1123
|
-
async def
|
|
1164
|
+
async def _apply_runtime_state(
|
|
1124
1165
|
self,
|
|
1125
1166
|
response: dict[str, Any],
|
|
1126
1167
|
entity_id: str | None,
|
|
@@ -1128,31 +1169,58 @@ class AutomationConfigTools:
|
|
|
1128
1169
|
wait: bool,
|
|
1129
1170
|
*,
|
|
1130
1171
|
identifier: str | None = None,
|
|
1172
|
+
run_actions: bool = False,
|
|
1131
1173
|
) -> str | None:
|
|
1132
|
-
"""
|
|
1174
|
+
"""Apply enabled and then run_actions without touching the stored config.
|
|
1133
1175
|
|
|
1134
|
-
Resolves ``entity_id`` from ``identifier`` when it is None. On
|
|
1135
|
-
standalone
|
|
1136
|
-
|
|
1137
|
-
|
|
1176
|
+
Resolves ``entity_id`` from ``identifier`` when it is None. On a
|
|
1177
|
+
standalone call a service failure raises a ToolError; after a config
|
|
1178
|
+
write it is reported as a partial-success warning, since the write
|
|
1179
|
+
itself already landed. Returns the resolved entity_id.
|
|
1138
1180
|
"""
|
|
1139
|
-
if enabled is None:
|
|
1181
|
+
if enabled is None and not run_actions:
|
|
1140
1182
|
return entity_id
|
|
1141
1183
|
if entity_id is None and identifier:
|
|
1142
|
-
entity_id = await
|
|
1184
|
+
entity_id = await _resolve_runtime_target(
|
|
1143
1185
|
self._client, identifier, response
|
|
1144
1186
|
)
|
|
1145
1187
|
if entity_id is None:
|
|
1146
|
-
|
|
1147
|
-
|
|
1188
|
+
retry_args: list[str] = []
|
|
1189
|
+
if enabled is not None:
|
|
1190
|
+
response["enabled_requested"] = enabled
|
|
1191
|
+
response["enabled_applied"] = False
|
|
1192
|
+
retry_args.append(f"enabled={enabled}")
|
|
1193
|
+
if run_actions:
|
|
1194
|
+
response["actions_triggered"] = False
|
|
1195
|
+
retry_args.append("run_actions=True")
|
|
1148
1196
|
retry_id = identifier or response.get("unique_id") or "<automation id>"
|
|
1149
1197
|
response.setdefault("warnings", []).append(
|
|
1150
1198
|
"Automation was written, but its entity_id could not be resolved; "
|
|
1151
|
-
"the requested
|
|
1199
|
+
"the requested runtime change was not applied. Retry with "
|
|
1152
1200
|
f"ha_config_set_automation(identifier='{retry_id}', "
|
|
1153
|
-
f"
|
|
1201
|
+
f"{', '.join(retry_args)}) once the automation is loaded."
|
|
1154
1202
|
)
|
|
1155
1203
|
return None
|
|
1204
|
+
if enabled is not None:
|
|
1205
|
+
await self._apply_enabled_state(
|
|
1206
|
+
response, entity_id, enabled, wait, identifier=identifier
|
|
1207
|
+
)
|
|
1208
|
+
if run_actions:
|
|
1209
|
+
await self._run_automation_actions(
|
|
1210
|
+
response, entity_id, identifier=identifier
|
|
1211
|
+
)
|
|
1212
|
+
return entity_id
|
|
1213
|
+
|
|
1214
|
+
async def _apply_enabled_state(
|
|
1215
|
+
self,
|
|
1216
|
+
response: dict[str, Any],
|
|
1217
|
+
entity_id: str,
|
|
1218
|
+
enabled: bool,
|
|
1219
|
+
wait: bool,
|
|
1220
|
+
*,
|
|
1221
|
+
identifier: str | None = None,
|
|
1222
|
+
) -> None:
|
|
1223
|
+
"""Turn the resolved automation on or off, then optionally verify it."""
|
|
1156
1224
|
try:
|
|
1157
1225
|
await _set_automation_enabled(self._client, entity_id, enabled)
|
|
1158
1226
|
except (
|
|
@@ -1160,7 +1228,7 @@ class AutomationConfigTools:
|
|
|
1160
1228
|
HomeAssistantAuthError,
|
|
1161
1229
|
HomeAssistantConnectionError,
|
|
1162
1230
|
) as exc:
|
|
1163
|
-
if response.get("action")
|
|
1231
|
+
if response.get("action") in _STANDALONE_RUNTIME_ACTIONS:
|
|
1164
1232
|
exception_to_structured_error(
|
|
1165
1233
|
exc,
|
|
1166
1234
|
context={
|
|
@@ -1181,12 +1249,49 @@ class AutomationConfigTools:
|
|
|
1181
1249
|
"Automation config was written, but the requested enabled state "
|
|
1182
1250
|
f"could not be applied: {exc}"
|
|
1183
1251
|
)
|
|
1184
|
-
return
|
|
1252
|
+
return
|
|
1185
1253
|
response["enabled"] = enabled
|
|
1186
1254
|
response["enabled_applied"] = True
|
|
1187
1255
|
if wait:
|
|
1188
1256
|
await self._verify_enabled_state(response, entity_id, enabled)
|
|
1189
|
-
|
|
1257
|
+
|
|
1258
|
+
async def _run_automation_actions(
|
|
1259
|
+
self,
|
|
1260
|
+
response: dict[str, Any],
|
|
1261
|
+
entity_id: str,
|
|
1262
|
+
*,
|
|
1263
|
+
identifier: str | None = None,
|
|
1264
|
+
) -> None:
|
|
1265
|
+
"""Run the automation's actions now via automation.trigger."""
|
|
1266
|
+
try:
|
|
1267
|
+
await self._client.call_service(
|
|
1268
|
+
"automation", "trigger", {"entity_id": entity_id}
|
|
1269
|
+
)
|
|
1270
|
+
except (
|
|
1271
|
+
HomeAssistantAPIError,
|
|
1272
|
+
HomeAssistantAuthError,
|
|
1273
|
+
HomeAssistantConnectionError,
|
|
1274
|
+
) as exc:
|
|
1275
|
+
# With enabled in the same standalone call, the state change has
|
|
1276
|
+
# already landed, so a failed run is a partial success, not an error.
|
|
1277
|
+
if response.get("action") == "run_actions":
|
|
1278
|
+
exception_to_structured_error(
|
|
1279
|
+
exc,
|
|
1280
|
+
context={
|
|
1281
|
+
"action": "run_actions",
|
|
1282
|
+
"identifier": identifier,
|
|
1283
|
+
"entity_id": entity_id,
|
|
1284
|
+
},
|
|
1285
|
+
)
|
|
1286
|
+
logger.warning(
|
|
1287
|
+
"Actions not run for %s after config write: %s", entity_id, exc
|
|
1288
|
+
)
|
|
1289
|
+
response["actions_triggered"] = False
|
|
1290
|
+
response.setdefault("warnings", []).append(
|
|
1291
|
+
f"The requested change was applied, but the actions could not be run: {exc}"
|
|
1292
|
+
)
|
|
1293
|
+
return
|
|
1294
|
+
response["actions_triggered"] = True
|
|
1190
1295
|
|
|
1191
1296
|
async def _verify_enabled_state(
|
|
1192
1297
|
self, response: dict[str, Any], entity_id: str, enabled: bool
|
|
@@ -1220,6 +1325,8 @@ class AutomationConfigTools:
|
|
|
1220
1325
|
MandatoryBPS: bool,
|
|
1221
1326
|
enabled: bool | None,
|
|
1222
1327
|
wait: bool,
|
|
1328
|
+
*,
|
|
1329
|
+
run_actions: bool = False,
|
|
1223
1330
|
) -> tuple[dict[str, Any], BestPracticeCheckResult]:
|
|
1224
1331
|
"""Execute python_transform mode and return (response, bp_warnings)."""
|
|
1225
1332
|
if not identifier:
|
|
@@ -1292,13 +1399,20 @@ class AutomationConfigTools:
|
|
|
1292
1399
|
# storage key; thread it so the upsert skips the redundant re-resolve
|
|
1293
1400
|
# (issue #1813 Phase 0). Fall back to the raw identifier if the fetched
|
|
1294
1401
|
# body carried no ``id`` (not expected for a real automation).
|
|
1295
|
-
|
|
1296
|
-
|
|
1402
|
+
runtime_requested = enabled is not None or run_actions
|
|
1403
|
+
async with config_reload_waiter(
|
|
1404
|
+
self._client, "automation_reloaded", enabled=runtime_requested
|
|
1297
1405
|
) as wait_for_reload:
|
|
1298
1406
|
result = await self._upsert_automation(
|
|
1299
1407
|
transformed_config, identifier, resolved_id
|
|
1300
1408
|
)
|
|
1301
|
-
|
|
1409
|
+
reloaded = await wait_for_reload()
|
|
1410
|
+
note_reload_outcome(
|
|
1411
|
+
result, reloaded, domain="automation", requested=enabled is not None
|
|
1412
|
+
)
|
|
1413
|
+
run_actions = _run_actions_once_reloaded(
|
|
1414
|
+
result, reloaded, run_actions, identifier or result.get("unique_id")
|
|
1415
|
+
)
|
|
1302
1416
|
for warning in conflict_warnings:
|
|
1303
1417
|
result.setdefault("warnings", []).append(warning)
|
|
1304
1418
|
refetched = await self._get_automation_config_internal(identifier)
|
|
@@ -1317,12 +1431,13 @@ class AutomationConfigTools:
|
|
|
1317
1431
|
"automation",
|
|
1318
1432
|
)
|
|
1319
1433
|
|
|
1320
|
-
entity_id = await self.
|
|
1434
|
+
entity_id = await self._apply_runtime_state(
|
|
1321
1435
|
result,
|
|
1322
1436
|
entity_id,
|
|
1323
1437
|
enabled,
|
|
1324
1438
|
wait,
|
|
1325
1439
|
identifier=identifier or result.get("unique_id"),
|
|
1440
|
+
run_actions=run_actions,
|
|
1326
1441
|
)
|
|
1327
1442
|
_sync_post_write_automation_result(result, entity_id)
|
|
1328
1443
|
|
|
@@ -1358,6 +1473,8 @@ class AutomationConfigTools:
|
|
|
1358
1473
|
resolved_id: str | None = None,
|
|
1359
1474
|
detached_blueprint: str | None = None,
|
|
1360
1475
|
enabled: bool | None = None,
|
|
1476
|
+
*,
|
|
1477
|
+
run_actions: bool = False,
|
|
1361
1478
|
) -> dict[str, Any]:
|
|
1362
1479
|
"""Execute config-replacement mode and return the tool response.
|
|
1363
1480
|
|
|
@@ -1371,18 +1488,25 @@ class AutomationConfigTools:
|
|
|
1371
1488
|
is threaded to the upsert so it skips the redundant
|
|
1372
1489
|
re-resolve; None falls back to resolving inside the REST client.
|
|
1373
1490
|
"""
|
|
1374
|
-
|
|
1375
|
-
|
|
1491
|
+
runtime_requested = enabled is not None or run_actions
|
|
1492
|
+
async with config_reload_waiter(
|
|
1493
|
+
self._client, "automation_reloaded", enabled=runtime_requested
|
|
1376
1494
|
) as wait_for_reload:
|
|
1377
1495
|
result = await self._upsert_automation(config_dict, identifier, resolved_id)
|
|
1378
|
-
|
|
1496
|
+
reloaded = await wait_for_reload()
|
|
1497
|
+
note_reload_outcome(
|
|
1498
|
+
result, reloaded, domain="automation", requested=enabled is not None
|
|
1499
|
+
)
|
|
1500
|
+
run_actions = _run_actions_once_reloaded(
|
|
1501
|
+
result, reloaded, run_actions, identifier or result.get("unique_id")
|
|
1502
|
+
)
|
|
1379
1503
|
|
|
1380
1504
|
for warning in conflict_warnings or []:
|
|
1381
1505
|
result.setdefault("warnings", []).append(warning)
|
|
1382
1506
|
|
|
1383
1507
|
post_write_identifier = identifier or result.get("unique_id")
|
|
1384
1508
|
# A create already polled for the entity inside the upsert; with wait=True
|
|
1385
|
-
# the resolver below polls again. Either way,
|
|
1509
|
+
# the resolver below polls again. Either way, _apply_runtime_state must
|
|
1386
1510
|
# not start a further poll of its own.
|
|
1387
1511
|
entity_already_polled = wait or bool(result.get("entity_not_verified"))
|
|
1388
1512
|
entity_id = await _resolve_post_write_automation_entity(
|
|
@@ -1430,12 +1554,13 @@ class AutomationConfigTools:
|
|
|
1430
1554
|
"automation",
|
|
1431
1555
|
)
|
|
1432
1556
|
|
|
1433
|
-
entity_id = await self.
|
|
1557
|
+
entity_id = await self._apply_runtime_state(
|
|
1434
1558
|
result,
|
|
1435
1559
|
entity_id,
|
|
1436
1560
|
enabled,
|
|
1437
1561
|
wait,
|
|
1438
1562
|
identifier=None if entity_already_polled else post_write_identifier,
|
|
1563
|
+
run_actions=run_actions,
|
|
1439
1564
|
)
|
|
1440
1565
|
_sync_post_write_automation_result(result, entity_id)
|
|
1441
1566
|
|