ha-mcp-dev 8.5.0.dev2732__tar.gz → 8.5.0.dev2734__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.dev2732/src/ha_mcp_dev.egg-info → ha_mcp_dev-8.5.0.dev2734}/PKG-INFO +1 -1
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/pyproject.toml +1 -1
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_config_automations.py +371 -19
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_entities.py +48 -20
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/util_helpers.py +53 -1
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734/src/ha_mcp_dev.egg-info}/PKG-INFO +1 -1
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/LICENSE +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/MANIFEST.in +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/README.md +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/setup.cfg +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/__main__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_pypi_marker +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_rich_compat.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/requirements.txt +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/client.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/server.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_vendor/websockets/version.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/_version.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/auth/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/auth/consent_form.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/auth/oidc_compat.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/auth/provider.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/backup_manager.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/browser_landing.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/client/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/client/rest_client.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/client/supervisor_client.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/client/websocket_client.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/client/websocket_listener.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/config.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/errors.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/ha_request_queue.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/hacs_auto_refresh.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/http_transport.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/llm_exposure.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/log_filters.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/policy/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/policy/approval_queue.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/policy/decision_pin.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/policy/decisions.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/policy/editing.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/policy/evaluator.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/policy/events.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/policy/handlers.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/policy/middleware.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/policy/model.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/policy/persistence.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/policy/value_sources.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/py.typed +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/read_only.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/redaction.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/renamed_tools.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/.github/pull_request_template.md +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/evals/area-target-over-entity-list/case.yaml +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/evals/arrive-home-automation/case.yaml +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/evals/assist-shortcut-card/case.yaml +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/evals/avg-temperature/case.yaml +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/evals/backup-deletion-confirmation/case.yaml +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/evals/blueprint-authoring/case.yaml +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/evals/button-event-entity/case.yaml +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/evals/device-id-trigger-migration/case.yaml +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/evals/helper-flow-fields-not-platform-yaml/case.yaml +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/evals/media-player-song/case.yaml +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/evals/motion-light-automation-mode/case.yaml +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/evals/rename-entity-impact-analysis/case.yaml +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/evals/template-attributes-yaml-exception/case.yaml +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/evals/timer-finished-automation/case.yaml +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/evals/vacuum-last-clean/case.yaml +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/scripts/check_eval_cases.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/server.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/_i18n.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/_persistence.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/_theme.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/locales/README.md +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/locales/az.json +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/locales/de.json +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/locales/en.json +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/locales/es.json +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/locales/it.json +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/settings.css +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/settings.html +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/settings_ui/settings.js +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/smoke_test.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/strict_bps.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tool_dispatch.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/auto_backup.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/backup.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/best_practice_checker.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/best_practice_result.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/best_practice_variables.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/blueprint_sources.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/blueprint_write.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/bulk_selector.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/component_api.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/component_config_entries.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/component_config_reads.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/component_devices.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/component_registries.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/config_entry_flow.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/config_entry_identity.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/device_control.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/entity_registration.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/error_log_parsing.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/hacs_registration.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/helpers.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/log_common.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/log_sources.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/log_sources_fault.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/radio/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/radio/base.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/radio/matter.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/radio/thread.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/radio/zigbee.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/radio/zwave.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/reference_validator.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/registry.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/scene_discovery.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/smart_search/_base.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/smart_search/_config.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_addons.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_areas.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_blueprints.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_bug_report.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_calendar.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_camera.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_categories.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_code.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_dev.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_energy.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_filesystem.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_groups.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_hacs.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_history.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_integrations.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_labels.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_logs.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_radio.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_registry.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_resources.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_search.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_security_policy.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_service.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_services.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_system.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_themes.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_todo.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_traces.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_updates.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_utility.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_zones.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/validation_middleware.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/transforms/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/transforms/categorized_search.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/transforms/component_search.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/transforms/write_tool_note.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/transport_security.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/update_check.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/utils/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/utils/config_hash.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/utils/config_write_lock.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/utils/dashboard_patch.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/utils/data_paths.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/utils/domain_handlers.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/utils/entity_membership.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/utils/fuzzy_search.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/utils/mcp_client_host.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/utils/operation_manager.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/utils/python_sandbox.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/utils/registry_update_lock.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/utils/skill_loader.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/utils/usage_logger.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/visibility/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/visibility/enforcement.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/visibility/model.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/visibility/persistence.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/visibility/resolver.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp_dev.egg-info/SOURCES.txt +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/tests/__init__.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/tests/test_constants.py +0 -0
- {ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/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.dev2734"
|
|
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
|
{ha_mcp_dev-8.5.0.dev2732 → ha_mcp_dev-8.5.0.dev2734}/src/ha_mcp/tools/tools_config_automations.py
RENAMED
|
@@ -6,7 +6,7 @@ Home Assistant automation configurations.
|
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
8
|
import logging
|
|
9
|
-
from typing import Annotated, Any, cast
|
|
9
|
+
from typing import Annotated, Any, NoReturn, cast
|
|
10
10
|
|
|
11
11
|
from pydantic import Field
|
|
12
12
|
|
|
@@ -60,12 +60,15 @@ 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,
|
|
63
64
|
coerce_to_list,
|
|
64
65
|
fetch_entity_category,
|
|
65
66
|
merge_validation_meta,
|
|
66
67
|
parse_json_param,
|
|
68
|
+
wait_for_automation_entity_by_unique_id,
|
|
67
69
|
wait_for_entity_registered,
|
|
68
70
|
wait_for_entity_removed,
|
|
71
|
+
wait_for_state_change,
|
|
69
72
|
)
|
|
70
73
|
|
|
71
74
|
logger = logging.getLogger(__name__)
|
|
@@ -320,6 +323,117 @@ def _detect_conflicting_root_keys(config: Any) -> list[str]:
|
|
|
320
323
|
return warnings
|
|
321
324
|
|
|
322
325
|
|
|
326
|
+
def _validate_automation_identifier(identifier: str | None) -> None:
|
|
327
|
+
"""Validate an optional automation identifier before dispatch."""
|
|
328
|
+
if identifier is not None:
|
|
329
|
+
validate_identifier_not_empty(
|
|
330
|
+
identifier,
|
|
331
|
+
"identifier",
|
|
332
|
+
suggestions=[
|
|
333
|
+
"Omit identifier to create a new automation",
|
|
334
|
+
"Or pass a valid automation entity_id / unique_id to update",
|
|
335
|
+
],
|
|
336
|
+
context={"action": "set"},
|
|
337
|
+
)
|
|
338
|
+
|
|
339
|
+
|
|
340
|
+
def _skip_automation_runtime_backup(kwargs: dict[str, Any]) -> bool:
|
|
341
|
+
"""Skip config snapshots for runtime-only enabled changes."""
|
|
342
|
+
return (
|
|
343
|
+
kwargs.get("enabled") is not None
|
|
344
|
+
and kwargs.get("config") is None
|
|
345
|
+
and kwargs.get("python_transform") is None
|
|
346
|
+
and not kwargs.get("take_control_of_blueprint")
|
|
347
|
+
)
|
|
348
|
+
|
|
349
|
+
|
|
350
|
+
async def _resolve_post_write_automation_entity(
|
|
351
|
+
client: Any,
|
|
352
|
+
identifier: str | None,
|
|
353
|
+
entity_id: str | None,
|
|
354
|
+
wait: bool,
|
|
355
|
+
response: dict[str, Any],
|
|
356
|
+
) -> str | None:
|
|
357
|
+
"""Resolve a raw unique ID after a write when registration may lag."""
|
|
358
|
+
if (
|
|
359
|
+
wait
|
|
360
|
+
and not entity_id
|
|
361
|
+
and identifier
|
|
362
|
+
and not identifier.startswith("automation.")
|
|
363
|
+
):
|
|
364
|
+
try:
|
|
365
|
+
return await wait_for_automation_entity_by_unique_id(client, identifier)
|
|
366
|
+
except (HomeAssistantConnectionError, HomeAssistantAuthError) as e:
|
|
367
|
+
response.setdefault("warnings", []).append(
|
|
368
|
+
f"Automation registration verification failed: {e}"
|
|
369
|
+
)
|
|
370
|
+
return entity_id
|
|
371
|
+
|
|
372
|
+
|
|
373
|
+
async def _resolve_enabled_target(
|
|
374
|
+
client: Any, identifier: str, response: dict[str, Any]
|
|
375
|
+
) -> str | None:
|
|
376
|
+
"""Resolve the entity to receive a runtime enabled-state change."""
|
|
377
|
+
if identifier.startswith("automation."):
|
|
378
|
+
return identifier
|
|
379
|
+
# A config write reloads the automation and replaces its entity when the
|
|
380
|
+
# config changed (or creates it), so poll even when the caller passed
|
|
381
|
+
# wait=False.
|
|
382
|
+
return await _resolve_post_write_automation_entity(
|
|
383
|
+
client, identifier, None, True, response
|
|
384
|
+
)
|
|
385
|
+
|
|
386
|
+
|
|
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
|
+
def _sync_post_write_automation_result(
|
|
405
|
+
response: dict[str, Any], entity_id: str | None
|
|
406
|
+
) -> None:
|
|
407
|
+
"""Record a successfully resolved entity and clear stale poll state."""
|
|
408
|
+
if entity_id:
|
|
409
|
+
response["entity_id"] = entity_id
|
|
410
|
+
response.pop("entity_not_verified", None)
|
|
411
|
+
|
|
412
|
+
|
|
413
|
+
def _reject_enabled_in_config(config: Any) -> None:
|
|
414
|
+
"""Reject the runtime-only ``enabled`` key in a stored config body."""
|
|
415
|
+
if isinstance(config, dict) and "enabled" in config:
|
|
416
|
+
raise_tool_error(
|
|
417
|
+
create_error_response(
|
|
418
|
+
ErrorCode.VALIDATION_INVALID_PARAMETER,
|
|
419
|
+
"'enabled' is a runtime-only tool parameter, not a valid "
|
|
420
|
+
"automation config key",
|
|
421
|
+
suggestions=[
|
|
422
|
+
"Remove 'enabled' from config and pass enabled=True or False "
|
|
423
|
+
+ "to ha_config_set_automation",
|
|
424
|
+
"Use enabled=None to leave the current runtime state unchanged",
|
|
425
|
+
],
|
|
426
|
+
context={"action": "set", "invalid_key": "enabled"},
|
|
427
|
+
)
|
|
428
|
+
)
|
|
429
|
+
|
|
430
|
+
|
|
431
|
+
async def _set_automation_enabled(client: Any, entity_id: str, enabled: bool) -> Any:
|
|
432
|
+
"""Set an automation's runtime enabled state through Home Assistant."""
|
|
433
|
+
service = "turn_on" if enabled else "turn_off"
|
|
434
|
+
return await client.call_service("automation", service, {"entity_id": entity_id})
|
|
435
|
+
|
|
436
|
+
|
|
323
437
|
def _strip_redundant_identifier_echo(
|
|
324
438
|
result: dict[str, Any],
|
|
325
439
|
*,
|
|
@@ -399,6 +513,18 @@ class AutomationConfigTools:
|
|
|
399
513
|
)
|
|
400
514
|
return None
|
|
401
515
|
|
|
516
|
+
async def _resolve_automation_entity_id_strict(self, identifier: str) -> str | None:
|
|
517
|
+
"""Resolve an identifier without hiding transport/authentication errors."""
|
|
518
|
+
states = await self._client.get_states()
|
|
519
|
+
for state in states:
|
|
520
|
+
state_entity_id = state.get("entity_id", "")
|
|
521
|
+
if state_entity_id.startswith("automation.") and (
|
|
522
|
+
state_entity_id == identifier
|
|
523
|
+
or state.get("attributes", {}).get("id") == identifier
|
|
524
|
+
):
|
|
525
|
+
return str(state_entity_id)
|
|
526
|
+
return None
|
|
527
|
+
|
|
402
528
|
@tool(
|
|
403
529
|
name="ha_config_get_automation",
|
|
404
530
|
tags={"Automations"},
|
|
@@ -525,7 +651,11 @@ class AutomationConfigTools:
|
|
|
525
651
|
"title": "Create or Update Automation",
|
|
526
652
|
},
|
|
527
653
|
)
|
|
528
|
-
@with_auto_backup(
|
|
654
|
+
@with_auto_backup(
|
|
655
|
+
domain="automation",
|
|
656
|
+
id_fn=automation_backup_target,
|
|
657
|
+
skip_fn=_skip_automation_runtime_backup,
|
|
658
|
+
)
|
|
529
659
|
@log_tool_usage
|
|
530
660
|
async def ha_config_set_automation(
|
|
531
661
|
self,
|
|
@@ -605,6 +735,19 @@ class AutomationConfigTools:
|
|
|
605
735
|
default=True,
|
|
606
736
|
),
|
|
607
737
|
] = True,
|
|
738
|
+
enabled: Annotated[
|
|
739
|
+
bool | None,
|
|
740
|
+
Field(
|
|
741
|
+
description=(
|
|
742
|
+
"Turn the automation on (True) or off (False) after an optional config "
|
|
743
|
+
"update; None leaves it unchanged. Can be used standalone with identifier "
|
|
744
|
+
"and no config. Not written into the stored config: Home Assistant keeps "
|
|
745
|
+
"the state across restarts, but a config 'initial_state' overrides it "
|
|
746
|
+
"whenever the automation is reloaded or HA starts."
|
|
747
|
+
),
|
|
748
|
+
default=None,
|
|
749
|
+
),
|
|
750
|
+
] = None,
|
|
608
751
|
MandatoryBPS: Annotated[
|
|
609
752
|
bool,
|
|
610
753
|
Field(default=True),
|
|
@@ -660,13 +803,17 @@ class AutomationConfigTools:
|
|
|
660
803
|
-> ha_config_set_helper(helper_type='counter' | 'timer' | ...)
|
|
661
804
|
|
|
662
805
|
Supports three modes: full config replacement, Python transformation,
|
|
663
|
-
or take_control_of_blueprint (see below).
|
|
806
|
+
or take_control_of_blueprint (see below). Any of them can also take
|
|
807
|
+
`enabled`, which can be passed alone with `identifier` to turn an
|
|
808
|
+
automation on or off without touching its config.
|
|
664
809
|
|
|
665
810
|
WHEN TO USE WHICH MODE:
|
|
666
811
|
- python_transform: RECOMMENDED for edits to existing automations. Surgical updates.
|
|
667
812
|
- config: Use for creating new automations or full restructures.
|
|
668
813
|
- take_control_of_blueprint: converts a blueprint-backed automation
|
|
669
814
|
into a standalone one. Takes no config of its own.
|
|
815
|
+
- enabled (with identifier, no config): turn an automation off or back
|
|
816
|
+
on, e.g. ha_config_set_automation(identifier="automation.x", enabled=False).
|
|
670
817
|
|
|
671
818
|
IMPORTANT: python_transform requires 'identifier' and 'config_hash' from ha_config_get_automation().
|
|
672
819
|
|
|
@@ -840,16 +987,7 @@ class AutomationConfigTools:
|
|
|
840
987
|
# from the downstream lookup. The ``not identifier`` check
|
|
841
988
|
# further down the python_transform branch still handles the
|
|
842
989
|
# explicit ``identifier is None`` case for that mode.
|
|
843
|
-
|
|
844
|
-
validate_identifier_not_empty(
|
|
845
|
-
identifier,
|
|
846
|
-
"identifier",
|
|
847
|
-
suggestions=[
|
|
848
|
-
"Omit identifier to create a new automation",
|
|
849
|
-
"Or pass a valid automation entity_id / unique_id to update",
|
|
850
|
-
],
|
|
851
|
-
context={"action": "set"},
|
|
852
|
-
)
|
|
990
|
+
_validate_automation_identifier(identifier)
|
|
853
991
|
validate_write_modes(
|
|
854
992
|
"automation",
|
|
855
993
|
"identifier",
|
|
@@ -871,6 +1009,23 @@ class AutomationConfigTools:
|
|
|
871
1009
|
# wins, so it can still lock against a config it read itself.
|
|
872
1010
|
config_hash = config_hash or taken.config_hash
|
|
873
1011
|
|
|
1012
|
+
enabled_only_response = await self._maybe_set_enabled_only(
|
|
1013
|
+
identifier,
|
|
1014
|
+
config,
|
|
1015
|
+
python_transform,
|
|
1016
|
+
category,
|
|
1017
|
+
enabled,
|
|
1018
|
+
wait,
|
|
1019
|
+
)
|
|
1020
|
+
if enabled_only_response is not None:
|
|
1021
|
+
attach_skill_content(
|
|
1022
|
+
enabled_only_response,
|
|
1023
|
+
MandatoryBPS=MandatoryBPS,
|
|
1024
|
+
canonical_files=_AUTOMATION_SKILL_FILES,
|
|
1025
|
+
referenced_files=bp_warnings.referenced_files,
|
|
1026
|
+
)
|
|
1027
|
+
return enabled_only_response
|
|
1028
|
+
|
|
874
1029
|
if python_transform is not None:
|
|
875
1030
|
response, bp_warnings = await self._run_python_transform(
|
|
876
1031
|
identifier,
|
|
@@ -878,6 +1033,8 @@ class AutomationConfigTools:
|
|
|
878
1033
|
python_transform,
|
|
879
1034
|
category,
|
|
880
1035
|
MandatoryBPS,
|
|
1036
|
+
enabled,
|
|
1037
|
+
wait,
|
|
881
1038
|
)
|
|
882
1039
|
return response
|
|
883
1040
|
|
|
@@ -895,6 +1052,7 @@ class AutomationConfigTools:
|
|
|
895
1052
|
)
|
|
896
1053
|
|
|
897
1054
|
config_dict = self._parse_and_validate_config(config)
|
|
1055
|
+
_reject_enabled_in_config(config_dict)
|
|
898
1056
|
|
|
899
1057
|
# Extract category before sending to HA REST API (which rejects unknown keys).
|
|
900
1058
|
# Parameter takes precedence over config dict value.
|
|
@@ -950,6 +1108,7 @@ class AutomationConfigTools:
|
|
|
950
1108
|
conflict_warnings,
|
|
951
1109
|
resolved_id,
|
|
952
1110
|
detached_blueprint,
|
|
1111
|
+
enabled,
|
|
953
1112
|
)
|
|
954
1113
|
|
|
955
1114
|
except ToolError as te:
|
|
@@ -1078,6 +1237,156 @@ class AutomationConfigTools:
|
|
|
1078
1237
|
)
|
|
1079
1238
|
return TakenControl(taken, blueprint_path, fetched_hash)
|
|
1080
1239
|
|
|
1240
|
+
async def _maybe_set_enabled_only(
|
|
1241
|
+
self,
|
|
1242
|
+
identifier: str | None,
|
|
1243
|
+
config: Any,
|
|
1244
|
+
python_transform: str | None,
|
|
1245
|
+
category: str | None,
|
|
1246
|
+
enabled: bool | None,
|
|
1247
|
+
wait: bool,
|
|
1248
|
+
) -> dict[str, Any] | None:
|
|
1249
|
+
"""Handle a standalone runtime state request, if one was supplied."""
|
|
1250
|
+
if enabled is None or config is not None or python_transform is not None:
|
|
1251
|
+
return None
|
|
1252
|
+
if category is not None:
|
|
1253
|
+
raise_tool_error(
|
|
1254
|
+
create_error_response(
|
|
1255
|
+
ErrorCode.VALIDATION_INVALID_PARAMETER,
|
|
1256
|
+
"category requires a config update",
|
|
1257
|
+
suggestions=[
|
|
1258
|
+
"Pass config or python_transform when assigning a category",
|
|
1259
|
+
"Omit category for a standalone enabled state change",
|
|
1260
|
+
],
|
|
1261
|
+
context={"action": "set_enabled", "category": category},
|
|
1262
|
+
)
|
|
1263
|
+
)
|
|
1264
|
+
return await self._set_enabled_only(identifier, enabled, wait)
|
|
1265
|
+
|
|
1266
|
+
async def _set_enabled_only(
|
|
1267
|
+
self, identifier: str | None, enabled: bool, wait: bool
|
|
1268
|
+
) -> dict[str, Any]:
|
|
1269
|
+
"""Set an existing automation's runtime state without replacing config."""
|
|
1270
|
+
if not identifier:
|
|
1271
|
+
raise_tool_error(
|
|
1272
|
+
create_error_response(
|
|
1273
|
+
ErrorCode.VALIDATION_INVALID_PARAMETER,
|
|
1274
|
+
"identifier is required when setting enabled without config",
|
|
1275
|
+
suggestions=[
|
|
1276
|
+
"Pass an automation entity_id or unique_id",
|
|
1277
|
+
"Use ha_search(domain_filter='automation') to find automations",
|
|
1278
|
+
],
|
|
1279
|
+
context={"action": "set_enabled", "enabled": enabled},
|
|
1280
|
+
)
|
|
1281
|
+
)
|
|
1282
|
+
entity_id = await self._resolve_automation_entity_id_strict(identifier)
|
|
1283
|
+
if not entity_id:
|
|
1284
|
+
await self._raise_automation_not_found(identifier)
|
|
1285
|
+
response: dict[str, Any] = {
|
|
1286
|
+
"success": True,
|
|
1287
|
+
"action": "set_enabled",
|
|
1288
|
+
"automation_id": entity_id,
|
|
1289
|
+
}
|
|
1290
|
+
await self._apply_enabled_state(
|
|
1291
|
+
response,
|
|
1292
|
+
entity_id,
|
|
1293
|
+
enabled,
|
|
1294
|
+
wait,
|
|
1295
|
+
identifier=identifier,
|
|
1296
|
+
)
|
|
1297
|
+
return response
|
|
1298
|
+
|
|
1299
|
+
async def _apply_enabled_state(
|
|
1300
|
+
self,
|
|
1301
|
+
response: dict[str, Any],
|
|
1302
|
+
entity_id: str | None,
|
|
1303
|
+
enabled: bool | None,
|
|
1304
|
+
wait: bool,
|
|
1305
|
+
*,
|
|
1306
|
+
identifier: str | None = None,
|
|
1307
|
+
) -> str | None:
|
|
1308
|
+
"""Turn the automation on or off without touching its stored config.
|
|
1309
|
+
|
|
1310
|
+
Resolves ``entity_id`` from ``identifier`` when it is None. On the
|
|
1311
|
+
standalone ``set_enabled`` action a service failure raises a ToolError;
|
|
1312
|
+
after a config write it is reported as a partial-success warning, since
|
|
1313
|
+
the write itself already landed. Returns the resolved entity_id.
|
|
1314
|
+
"""
|
|
1315
|
+
if enabled is None:
|
|
1316
|
+
return entity_id
|
|
1317
|
+
if entity_id is None and identifier:
|
|
1318
|
+
entity_id = await _resolve_enabled_target(
|
|
1319
|
+
self._client, identifier, response
|
|
1320
|
+
)
|
|
1321
|
+
if entity_id is None:
|
|
1322
|
+
response["enabled_requested"] = enabled
|
|
1323
|
+
response["enabled_applied"] = False
|
|
1324
|
+
retry_id = identifier or response.get("unique_id") or "<automation id>"
|
|
1325
|
+
response.setdefault("warnings", []).append(
|
|
1326
|
+
"Automation was written, but its entity_id could not be resolved; "
|
|
1327
|
+
"the requested enabled state was not applied. Retry with "
|
|
1328
|
+
f"ha_config_set_automation(identifier='{retry_id}', "
|
|
1329
|
+
f"enabled={enabled}) once the automation is loaded."
|
|
1330
|
+
)
|
|
1331
|
+
return None
|
|
1332
|
+
try:
|
|
1333
|
+
await _set_automation_enabled(self._client, entity_id, enabled)
|
|
1334
|
+
except (
|
|
1335
|
+
HomeAssistantAPIError,
|
|
1336
|
+
HomeAssistantAuthError,
|
|
1337
|
+
HomeAssistantConnectionError,
|
|
1338
|
+
) as exc:
|
|
1339
|
+
if response.get("action") == "set_enabled":
|
|
1340
|
+
exception_to_structured_error(
|
|
1341
|
+
exc,
|
|
1342
|
+
context={
|
|
1343
|
+
"action": "set_enabled",
|
|
1344
|
+
"identifier": identifier,
|
|
1345
|
+
"entity_id": entity_id,
|
|
1346
|
+
"enabled": enabled,
|
|
1347
|
+
},
|
|
1348
|
+
)
|
|
1349
|
+
logger.warning(
|
|
1350
|
+
"Enabled state not applied to %s after config write: %s",
|
|
1351
|
+
entity_id,
|
|
1352
|
+
exc,
|
|
1353
|
+
)
|
|
1354
|
+
response["enabled_requested"] = enabled
|
|
1355
|
+
response["enabled_applied"] = False
|
|
1356
|
+
response.setdefault("warnings", []).append(
|
|
1357
|
+
"Automation config was written, but the requested enabled state "
|
|
1358
|
+
f"could not be applied: {exc}"
|
|
1359
|
+
)
|
|
1360
|
+
return entity_id
|
|
1361
|
+
response["enabled"] = enabled
|
|
1362
|
+
response["enabled_applied"] = True
|
|
1363
|
+
if wait:
|
|
1364
|
+
await self._verify_enabled_state(response, entity_id, enabled)
|
|
1365
|
+
return entity_id
|
|
1366
|
+
|
|
1367
|
+
async def _verify_enabled_state(
|
|
1368
|
+
self, response: dict[str, Any], entity_id: str, enabled: bool
|
|
1369
|
+
) -> None:
|
|
1370
|
+
"""Wait for the automation to report the requested state."""
|
|
1371
|
+
expected_state = "on" if enabled else "off"
|
|
1372
|
+
try:
|
|
1373
|
+
verified = await wait_for_state_change(
|
|
1374
|
+
self._client,
|
|
1375
|
+
entity_id,
|
|
1376
|
+
expected_state=expected_state,
|
|
1377
|
+
)
|
|
1378
|
+
except (HomeAssistantConnectionError, HomeAssistantAuthError) as exc:
|
|
1379
|
+
response.setdefault("warnings", []).append(
|
|
1380
|
+
f"Automation {entity_id} was sent {expected_state}, but state "
|
|
1381
|
+
f"verification failed: {exc}"
|
|
1382
|
+
)
|
|
1383
|
+
return
|
|
1384
|
+
if verified is None:
|
|
1385
|
+
response.setdefault("warnings", []).append(
|
|
1386
|
+
f"Automation {entity_id} was sent {expected_state} but its state "
|
|
1387
|
+
"could not be verified before the timeout."
|
|
1388
|
+
)
|
|
1389
|
+
|
|
1081
1390
|
async def _run_python_transform(
|
|
1082
1391
|
self,
|
|
1083
1392
|
identifier: str | None,
|
|
@@ -1085,6 +1394,8 @@ class AutomationConfigTools:
|
|
|
1085
1394
|
python_transform: str,
|
|
1086
1395
|
category: str | None,
|
|
1087
1396
|
MandatoryBPS: bool,
|
|
1397
|
+
enabled: bool | None,
|
|
1398
|
+
wait: bool,
|
|
1088
1399
|
) -> tuple[dict[str, Any], BestPracticeCheckResult]:
|
|
1089
1400
|
"""Execute python_transform mode and return (response, bp_warnings)."""
|
|
1090
1401
|
if not identifier:
|
|
@@ -1130,6 +1441,7 @@ class AutomationConfigTools:
|
|
|
1130
1441
|
)
|
|
1131
1442
|
|
|
1132
1443
|
# Pop category before sending to HA REST API (rejects unknown keys)
|
|
1444
|
+
_reject_enabled_in_config(transformed_config)
|
|
1133
1445
|
transform_category = transformed_config.pop("category", None)
|
|
1134
1446
|
effective_category = category if category is not None else transform_category
|
|
1135
1447
|
|
|
@@ -1156,9 +1468,13 @@ class AutomationConfigTools:
|
|
|
1156
1468
|
# storage key; thread it so the upsert skips the redundant re-resolve
|
|
1157
1469
|
# (issue #1813 Phase 0). Fall back to the raw identifier if the fetched
|
|
1158
1470
|
# body carried no ``id`` (not expected for a real automation).
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
)
|
|
1471
|
+
async with automation_reload_waiter(
|
|
1472
|
+
self._client, enabled=enabled is not None
|
|
1473
|
+
) as wait_for_reload:
|
|
1474
|
+
result = await self._upsert_automation(
|
|
1475
|
+
transformed_config, identifier, resolved_id
|
|
1476
|
+
)
|
|
1477
|
+
_note_reload_outcome(result, await wait_for_reload(), enabled)
|
|
1162
1478
|
for warning in conflict_warnings:
|
|
1163
1479
|
result.setdefault("warnings", []).append(warning)
|
|
1164
1480
|
refetched = await self._get_automation_config_internal(identifier)
|
|
@@ -1177,6 +1493,15 @@ class AutomationConfigTools:
|
|
|
1177
1493
|
"automation",
|
|
1178
1494
|
)
|
|
1179
1495
|
|
|
1496
|
+
entity_id = await self._apply_enabled_state(
|
|
1497
|
+
result,
|
|
1498
|
+
entity_id,
|
|
1499
|
+
enabled,
|
|
1500
|
+
wait,
|
|
1501
|
+
identifier=identifier or result.get("unique_id"),
|
|
1502
|
+
)
|
|
1503
|
+
_sync_post_write_automation_result(result, entity_id)
|
|
1504
|
+
|
|
1180
1505
|
response: dict[str, Any] = {
|
|
1181
1506
|
"success": True,
|
|
1182
1507
|
"action": "python_transform",
|
|
@@ -1208,6 +1533,7 @@ class AutomationConfigTools:
|
|
|
1208
1533
|
conflict_warnings: list[str] | None = None,
|
|
1209
1534
|
resolved_id: str | None = None,
|
|
1210
1535
|
detached_blueprint: str | None = None,
|
|
1536
|
+
enabled: bool | None = None,
|
|
1211
1537
|
) -> dict[str, Any]:
|
|
1212
1538
|
"""Execute config-replacement mode and return the tool response.
|
|
1213
1539
|
|
|
@@ -1221,11 +1547,29 @@ class AutomationConfigTools:
|
|
|
1221
1547
|
is threaded to the upsert so it skips the redundant
|
|
1222
1548
|
re-resolve; None falls back to resolving inside the REST client.
|
|
1223
1549
|
"""
|
|
1224
|
-
|
|
1550
|
+
async with automation_reload_waiter(
|
|
1551
|
+
self._client, enabled=enabled is not None
|
|
1552
|
+
) as wait_for_reload:
|
|
1553
|
+
result = await self._upsert_automation(config_dict, identifier, resolved_id)
|
|
1554
|
+
_note_reload_outcome(result, await wait_for_reload(), enabled)
|
|
1225
1555
|
|
|
1226
1556
|
for warning in conflict_warnings or []:
|
|
1227
1557
|
result.setdefault("warnings", []).append(warning)
|
|
1228
1558
|
|
|
1559
|
+
post_write_identifier = identifier or result.get("unique_id")
|
|
1560
|
+
# A create already polled for the entity inside the upsert; with wait=True
|
|
1561
|
+
# the resolver below polls again. Either way, _apply_enabled_state must
|
|
1562
|
+
# not start a further poll of its own.
|
|
1563
|
+
entity_already_polled = wait or bool(result.get("entity_not_verified"))
|
|
1564
|
+
entity_id = await _resolve_post_write_automation_entity(
|
|
1565
|
+
self._client,
|
|
1566
|
+
post_write_identifier,
|
|
1567
|
+
result.get("entity_id"),
|
|
1568
|
+
wait,
|
|
1569
|
+
result,
|
|
1570
|
+
)
|
|
1571
|
+
_sync_post_write_automation_result(result, entity_id)
|
|
1572
|
+
|
|
1229
1573
|
if result.get("entity_not_verified"):
|
|
1230
1574
|
result.setdefault("warnings", []).append(
|
|
1231
1575
|
f"{NOT_VERIFIED_WARNING_PREFIX} "
|
|
@@ -1236,7 +1580,6 @@ class AutomationConfigTools:
|
|
|
1236
1580
|
)
|
|
1237
1581
|
result.pop("entity_not_verified", None)
|
|
1238
1582
|
|
|
1239
|
-
entity_id = result.get("entity_id")
|
|
1240
1583
|
if not entity_id and identifier and identifier.startswith("automation."):
|
|
1241
1584
|
entity_id = identifier
|
|
1242
1585
|
if wait and entity_id:
|
|
@@ -1263,6 +1606,15 @@ class AutomationConfigTools:
|
|
|
1263
1606
|
"automation",
|
|
1264
1607
|
)
|
|
1265
1608
|
|
|
1609
|
+
entity_id = await self._apply_enabled_state(
|
|
1610
|
+
result,
|
|
1611
|
+
entity_id,
|
|
1612
|
+
enabled,
|
|
1613
|
+
wait,
|
|
1614
|
+
identifier=None if entity_already_polled else post_write_identifier,
|
|
1615
|
+
)
|
|
1616
|
+
_sync_post_write_automation_result(result, entity_id)
|
|
1617
|
+
|
|
1266
1618
|
if bp_warnings:
|
|
1267
1619
|
result["best_practice_warnings"] = list(bp_warnings)
|
|
1268
1620
|
|
|
@@ -1359,7 +1711,7 @@ class AutomationConfigTools:
|
|
|
1359
1711
|
raw_id = current.get("id")
|
|
1360
1712
|
return str(raw_id) if raw_id is not None else None
|
|
1361
1713
|
|
|
1362
|
-
async def _raise_automation_not_found(self, identifier: str) ->
|
|
1714
|
+
async def _raise_automation_not_found(self, identifier: str) -> NoReturn:
|
|
1363
1715
|
"""Raise a structured RESOURCE_NOT_FOUND ToolError for a missing automation.
|
|
1364
1716
|
|
|
1365
1717
|
Single source of truth for the 404→RESOURCE_NOT_FOUND mapping used
|
|
@@ -383,10 +383,11 @@ def _validate_enabled_constraint(
|
|
|
383
383
|
Registry-disabling (enabled=False) removes the entity from the HA
|
|
384
384
|
state machine entirely, making it invisible in the UI and
|
|
385
385
|
unqueryable via state APIs until re-enabled AND the integration is
|
|
386
|
-
reloaded. For automations
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
386
|
+
reloaded. For automations, use
|
|
387
|
+
ha_config_set_automation(identifier=..., enabled=...) to control their
|
|
388
|
+
runtime enabled state. For scripts, script.turn_off only stops a
|
|
389
|
+
currently running execution; it does not disable the script, and Home
|
|
390
|
+
Assistant has no script runtime enable/disable service.
|
|
390
391
|
"""
|
|
391
392
|
if enabled is False:
|
|
392
393
|
blocked = [
|
|
@@ -394,20 +395,41 @@ def _validate_enabled_constraint(
|
|
|
394
395
|
]
|
|
395
396
|
if blocked:
|
|
396
397
|
_domain = blocked[0].split(".")[0]
|
|
397
|
-
|
|
398
|
+
if _domain == "script":
|
|
399
|
+
message = (
|
|
400
|
+
"Cannot registry-disable script entities with "
|
|
401
|
+
"ha_set_entity(enabled=False). This removes the entity from the "
|
|
402
|
+
"state machine and hides it from the UI until it is re-enabled "
|
|
403
|
+
"and scripts are reloaded. Use ha_call_service('script', "
|
|
404
|
+
f"'turn_off', entity_id='{blocked[0]}') only to stop a "
|
|
405
|
+
"currently running execution; it does not disable the script. "
|
|
406
|
+
"Home Assistant has no script runtime enable/disable service."
|
|
407
|
+
)
|
|
408
|
+
suggestions = [
|
|
409
|
+
"Use script.turn_off only to stop a currently running execution; it does not disable the script",
|
|
410
|
+
"Home Assistant has no script runtime enable/disable service",
|
|
411
|
+
]
|
|
412
|
+
else:
|
|
413
|
+
message = (
|
|
414
|
+
f"Cannot registry-disable {_domain} entities with "
|
|
415
|
+
"ha_set_entity(enabled=False). This removes the entity from the "
|
|
416
|
+
"state machine and hides it from the UI until it is re-enabled "
|
|
417
|
+
f"AND the {_domain}s are reloaded. Use "
|
|
418
|
+
f"ha_config_set_automation(identifier='{blocked[0]}', "
|
|
419
|
+
"enabled=False) instead to disable it without removing it."
|
|
420
|
+
)
|
|
421
|
+
suggestions = [
|
|
422
|
+
"Use ha_config_set_automation(identifier=..., enabled=...) to "
|
|
423
|
+
+ "disable the automation (keeps it visible and manageable)",
|
|
424
|
+
"Use ha_config_set_automation(identifier=..., enabled=True) to "
|
|
425
|
+
+ "re-enable it later",
|
|
426
|
+
"ha_set_entity(enabled=False) is for registry-level disable — it fully hides the entity",
|
|
427
|
+
]
|
|
398
428
|
raise_tool_error(
|
|
399
429
|
create_error_response(
|
|
400
430
|
ErrorCode.VALIDATION_INVALID_PARAMETER,
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
f"until it is re-enabled AND the {_domain}s are reloaded. "
|
|
404
|
-
f"Use ha_call_service('{_domain}', 'turn_off', entity_id='{blocked[0]}') instead "
|
|
405
|
-
f"to disable it without removing it.",
|
|
406
|
-
suggestions=[
|
|
407
|
-
f"Use {_service_hint} to disable the {_domain} (keeps it visible and manageable)",
|
|
408
|
-
f"Use {_domain}.turn_on to re-enable it later",
|
|
409
|
-
"ha_set_entity(enabled=False) is for registry-level disable — it fully hides the entity",
|
|
410
|
-
],
|
|
431
|
+
message,
|
|
432
|
+
suggestions=suggestions,
|
|
411
433
|
)
|
|
412
434
|
)
|
|
413
435
|
|
|
@@ -1692,8 +1714,11 @@ class EntityTools:
|
|
|
1692
1714
|
"WARNING: Setting enabled=False is a registry-level disable — it completely "
|
|
1693
1715
|
"removes the entity from the state machine and hides it from the UI. "
|
|
1694
1716
|
"A reload or restart is required to restore it after re-enabling. "
|
|
1695
|
-
"NOT allowed for automation or script entities
|
|
1696
|
-
"
|
|
1717
|
+
"NOT allowed for automation or script entities. For automations use "
|
|
1718
|
+
"ha_config_set_automation(identifier=..., enabled=...)"
|
|
1719
|
+
"; script.turn_off only stops "
|
|
1720
|
+
"a currently running execution and does not disable the script. "
|
|
1721
|
+
"Home Assistant has no script runtime enable/disable service."
|
|
1697
1722
|
),
|
|
1698
1723
|
default=None,
|
|
1699
1724
|
),
|
|
@@ -1866,9 +1891,12 @@ class EntityTools:
|
|
|
1866
1891
|
in state queries, dashboards, or automations until re-enabled AND the integration is
|
|
1867
1892
|
reloaded. This is NOT the same as "turning off" an entity.
|
|
1868
1893
|
|
|
1869
|
-
For automations and scripts, enabled=False is blocked.
|
|
1870
|
-
|
|
1871
|
-
|
|
1894
|
+
For automations and scripts, enabled=False is blocked. For automations,
|
|
1895
|
+
use ha_config_set_automation(identifier="automation.xxx", enabled=False)
|
|
1896
|
+
(or enabled=True to re-enable).
|
|
1897
|
+
For scripts, ha_call_service("script", "turn_off", entity_id="script.xxx")
|
|
1898
|
+
only stops a currently running execution; it does not disable the script.
|
|
1899
|
+
Home Assistant has no script runtime enable/disable service.
|
|
1872
1900
|
"""
|
|
1873
1901
|
try:
|
|
1874
1902
|
entity_ids, is_bulk = _parse_set_entity_ids(entity_id)
|