ha-mcp-dev 8.4.3.dev2648__tar.gz → 8.4.3.dev2652__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.4.3.dev2648/src/ha_mcp_dev.egg-info → ha_mcp_dev-8.4.3.dev2652}/PKG-INFO +1 -1
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/pyproject.toml +91 -10
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/component_config_reads.py +16 -26
- ha_mcp_dev-8.4.3.dev2652/src/ha_mcp/tools/entity_registration.py +133 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_config_scenes.py +25 -57
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_config_scripts.py +46 -92
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652/src/ha_mcp_dev.egg-info}/PKG-INFO +1 -1
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp_dev.egg-info/SOURCES.txt +1 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/LICENSE +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/MANIFEST.in +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/README.md +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/setup.cfg +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/__main__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_pypi_marker +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_rich_compat.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/requirements.txt +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/client.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/server.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_vendor/websockets/version.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/_version.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/auth/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/auth/consent_form.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/auth/oidc_compat.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/auth/provider.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/backup_manager.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/browser_landing.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/client/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/client/rest_client.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/client/supervisor_client.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/client/websocket_client.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/client/websocket_listener.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/config.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/errors.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/ha_request_queue.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/hacs_auto_refresh.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/http_transport.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/llm_exposure.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/log_filters.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/policy/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/policy/approval_queue.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/policy/editing.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/policy/evaluator.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/policy/handlers.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/policy/middleware.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/policy/model.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/policy/persistence.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/policy/value_sources.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/py.typed +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/read_only.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/redaction.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/renamed_tools.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/.github/pull_request_template.md +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/evals/area-target-over-entity-list/case.yaml +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/evals/arrive-home-automation/case.yaml +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/evals/assist-shortcut-card/case.yaml +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/evals/avg-temperature/case.yaml +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/evals/backup-deletion-confirmation/case.yaml +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/evals/blueprint-authoring/case.yaml +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/evals/button-event-entity/case.yaml +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/evals/device-id-trigger-migration/case.yaml +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/evals/helper-flow-fields-not-platform-yaml/case.yaml +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/evals/media-player-song/case.yaml +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/evals/motion-light-automation-mode/case.yaml +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/evals/rename-entity-impact-analysis/case.yaml +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/evals/template-attributes-yaml-exception/case.yaml +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/evals/timer-finished-automation/case.yaml +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/evals/vacuum-last-clean/case.yaml +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/scripts/check_eval_cases.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/server.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/_i18n.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/_persistence.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/_theme.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/locales/README.md +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/locales/de.json +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/locales/en.json +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/locales/es.json +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/locales/it.json +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/settings.css +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/settings.html +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/settings_ui/settings.js +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/smoke_test.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/strict_bps.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tool_dispatch.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/auto_backup.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/backup.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/best_practice_checker.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/best_practice_result.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/best_practice_variables.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/blueprint_sources.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/blueprint_write.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/bulk_selector.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/component_api.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/component_config_entries.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/component_devices.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/component_registries.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/config_entry_flow.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/config_entry_identity.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/device_control.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/error_log_parsing.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/hacs_registration.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/helpers.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/log_common.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/log_sources.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/log_sources_fault.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/radio/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/radio/base.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/radio/matter.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/radio/thread.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/radio/zigbee.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/radio/zwave.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/reference_validator.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/registry.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/smart_search/_base.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/smart_search/_config.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_addons.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_areas.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_blueprints.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_bug_report.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_calendar.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_camera.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_categories.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_code.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_config_automations.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_dev.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_energy.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_entities.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_filesystem.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_groups.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_hacs.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_history.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_integrations.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_labels.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_logs.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_radio.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_registry.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_resources.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_search.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_security_policy.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_service.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_services.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_system.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_themes.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_todo.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_traces.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_updates.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_utility.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_zones.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/util_helpers.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/validation_middleware.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/transforms/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/transforms/categorized_search.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/transport_security.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/update_check.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/utils/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/utils/config_hash.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/utils/config_write_lock.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/utils/dashboard_patch.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/utils/data_paths.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/utils/domain_handlers.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/utils/entity_membership.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/utils/fuzzy_search.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/utils/operation_manager.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/utils/python_sandbox.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/utils/skill_loader.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/utils/usage_logger.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/visibility/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/visibility/enforcement.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/visibility/model.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/visibility/persistence.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/visibility/resolver.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/tests/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/tests/test_constants.py +0 -0
- {ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/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.4.3.
|
|
7
|
+
version = "8.4.3.dev2652"
|
|
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
|
|
@@ -258,36 +258,117 @@ ignore = [
|
|
|
258
258
|
|
|
259
259
|
[tool.pytest.ini_options]
|
|
260
260
|
testpaths = ["tests"]
|
|
261
|
-
python_files = ["test_*.py"
|
|
261
|
+
python_files = ["test_*.py"]
|
|
262
262
|
python_classes = ["Test*"]
|
|
263
263
|
python_functions = ["test_*"]
|
|
264
|
-
#
|
|
265
|
-
# running
|
|
264
|
+
# A parametrize list that resolves to nothing is a guard that silently stopped
|
|
265
|
+
# running: pytest reports "got empty parameter set", and the summary counts it
|
|
266
|
+
# as neither a failure nor a real skip. Make it a collection error instead.
|
|
266
267
|
empty_parameter_set_mark = "fail_at_collect"
|
|
268
|
+
|
|
269
|
+
# Command line options
|
|
267
270
|
addopts = [
|
|
268
271
|
"--strict-markers",
|
|
269
272
|
"--strict-config",
|
|
270
273
|
"--verbose",
|
|
271
274
|
"--tb=short",
|
|
275
|
+
"--maxfail=3",
|
|
276
|
+
"-ra",
|
|
277
|
+
"--durations=10",
|
|
272
278
|
]
|
|
279
|
+
|
|
280
|
+
# Test markers
|
|
273
281
|
markers = [
|
|
274
|
-
|
|
275
|
-
"
|
|
276
|
-
"
|
|
282
|
+
# Test speed
|
|
283
|
+
"slow: marks tests as slow (use -m 'not slow' to skip)",
|
|
284
|
+
"addon_disruptive: restarts the server-under-test's own process (addon self-restart); must never run concurrently with other tests on lanes where the MCP server is out-of-process - the lane workflow runs these in a single-worker phase AFTER the parallel run",
|
|
285
|
+
|
|
286
|
+
# Test types
|
|
287
|
+
"unit: unit tests (isolated, fast)",
|
|
288
|
+
"integration: integration tests requiring external services",
|
|
289
|
+
"e2e: end-to-end tests with full system",
|
|
290
|
+
"performance: performance and load tests",
|
|
291
|
+
|
|
292
|
+
# E2E test categories
|
|
277
293
|
"automation: automation lifecycle tests",
|
|
294
|
+
"blueprint: blueprint management tests",
|
|
278
295
|
"calendar: calendar event management tests",
|
|
279
296
|
"device: device control tests",
|
|
280
297
|
"script: script orchestration tests",
|
|
281
298
|
"helper: helper integration tests",
|
|
299
|
+
"integrations: integration management tests (config entries)",
|
|
300
|
+
"labels: label management tests",
|
|
301
|
+
"registry: entity and device registry tests",
|
|
302
|
+
"services: service discovery tests",
|
|
303
|
+
"todo: todo/shopping list management tests",
|
|
282
304
|
"convenience: convenience tools tests (scene, weather, energy, docs)",
|
|
305
|
+
"updates: update management tools tests",
|
|
306
|
+
"system: system management tests (restart, reload, health)",
|
|
307
|
+
"themes: frontend theme management tests",
|
|
283
308
|
"error_handling: error handling and edge case tests",
|
|
284
309
|
"cleanup: tests that create entities needing cleanup",
|
|
285
|
-
"
|
|
286
|
-
"
|
|
287
|
-
"
|
|
310
|
+
"area: area management tests",
|
|
311
|
+
"floor: floor management tests",
|
|
312
|
+
"zone: zone management tests",
|
|
313
|
+
"group: entity group management tests",
|
|
314
|
+
"hacs: HACS (Home Assistant Community Store) tests",
|
|
315
|
+
"update_path: component (stable tag + working tree) x new-server in-process update-path e2e (dedicated lane; runs only with E2E_UPDATE_PATH=1; #1783/#1785)",
|
|
316
|
+
"core: core tool tests (state, service, bulk control, history, templates)",
|
|
317
|
+
"config: configuration management tests (helpers, labels)",
|
|
318
|
+
"filesystem: filesystem access tools tests",
|
|
319
|
+
"haos_only: skip unless HAOS_TEST_IMAGE_PATH is set (HAOS-QEMU backend required; #1281)",
|
|
288
320
|
"beta_haos_only: beta HAOS image lanes with Supervisor/Core version expectations configured",
|
|
321
|
+
"container_only: skip when HAOS backend is active (testcontainer-specific behavior; #1281)",
|
|
322
|
+
"embedded_only: only the embedded testcontainer backend (E2E_BACKEND=embedded), the one lane that installs ha-mcp into the HA image (#2245)",
|
|
323
|
+
"external_only: in-process-server tiers only - skip for inaddon, stdio, container-embedded, and HAOS-embedded servers; #1349, #1527, #2233",
|
|
324
|
+
"inaddon_only: HAOS inaddon mode only - exercises is_running_in_addon()=True paths; #1349",
|
|
325
|
+
"haos_stdio_only: HAOS stdio mode only - exercises the installed ha-mcp command over a real stdio subprocess transport; #2233",
|
|
326
|
+
"haos_tls: final HAOS embedded scenario that restarts Core with HTTPS in the existing worker VM, then restores HTTP; #2241",
|
|
327
|
+
"haos_embedded_only: HAOS embedded mode only (HAOS_TEST_MODE=embedded) - the server shares Home Assistant's process and event loop; #2357",
|
|
328
|
+
"not_on_embedded: skip on the embedded backend (E2E_BACKEND=embedded) - provably redundant with the lane's own in-process ha_mcp_server session backend; #1527",
|
|
329
|
+
"not_on_haos_embedded: skip on the haos_embedded backend (HAOS_TEST_MODE=embedded) - provably redundant with the lane's own session backend, which enables the entry once and drives the in-process server for the whole suite; #1527",
|
|
330
|
+
"requires_tools_entry: needs the File & YAML Tools config entry - skipped on E2E_NO_TOOLS_ENTRY=1 lanes (#2292)",
|
|
331
|
+
"no_tools_only: runs only on E2E_NO_TOOLS_ENTRY=1 lanes (#2292)",
|
|
289
332
|
]
|
|
333
|
+
|
|
334
|
+
# Async support - session-scoped loop lets session-scoped fixtures
|
|
335
|
+
# (mcp_server, mcp_client, ha_client) share one event loop with tests.
|
|
336
|
+
# Without this, each test gets a new loop and session-scoped httpx
|
|
337
|
+
# clients fail with "Event loop is closed".
|
|
290
338
|
asyncio_mode = "auto"
|
|
339
|
+
asyncio_default_fixture_loop_scope = "session"
|
|
340
|
+
asyncio_default_test_loop_scope = "session"
|
|
341
|
+
|
|
342
|
+
# Per-test timeout (pytest-timeout). A stuck server-side await otherwise
|
|
343
|
+
# stalls the run silently until the JOB timeout - observed as a 22-minute
|
|
344
|
+
# hang in test_zone_search_discovery on the HAOS in-addon backend. 300s is
|
|
345
|
+
# ~10x the slowest legitimate test (~30s deliberate-timeout tests). The signal
|
|
346
|
+
# method interrupts only the hung test and raises inside the running coroutine,
|
|
347
|
+
# so the failure traceback names the exact stuck await.
|
|
348
|
+
timeout = 300
|
|
349
|
+
timeout_method = "signal"
|
|
350
|
+
# Bill the timeout to the TEST FUNCTION only. Session fixtures (container
|
|
351
|
+
# boot, the embedded backend's server bring-up, HAOS staging) legitimately
|
|
352
|
+
# exceed 300s and were being killed mid-setup on the first test per worker,
|
|
353
|
+
# preempting their own diagnostics. Runaway fixtures are still bounded by
|
|
354
|
+
# the CI job timeouts.
|
|
355
|
+
timeout_func_only = true
|
|
356
|
+
|
|
357
|
+
# Log capture
|
|
358
|
+
log_cli = true
|
|
359
|
+
log_cli_level = "INFO"
|
|
360
|
+
log_cli_format = "%(asctime)s [%(levelname)8s] %(name)s: %(message)s"
|
|
361
|
+
log_cli_date_format = "%Y-%m-%d %H:%M:%S"
|
|
362
|
+
|
|
363
|
+
# Treat warnings as errors to enforce clean tests
|
|
364
|
+
filterwarnings = [
|
|
365
|
+
"error",
|
|
366
|
+
# Allow specific non-critical warnings that don't affect functionality
|
|
367
|
+
"ignore::DeprecationWarning",
|
|
368
|
+
"ignore::PendingDeprecationWarning",
|
|
369
|
+
# Allow all ResourceWarnings, including those emitted during test cleanup
|
|
370
|
+
"ignore::ResourceWarning",
|
|
371
|
+
]
|
|
291
372
|
|
|
292
373
|
[dependency-groups]
|
|
293
374
|
dev = [
|
{ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/component_config_reads.py
RENAMED
|
@@ -3,19 +3,14 @@
|
|
|
3
3
|
Two consumers in the automation/script/scene family pay for a whole-collection
|
|
4
4
|
fetch to answer a single question:
|
|
5
5
|
|
|
6
|
-
-
|
|
7
|
-
``
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
instant it returns (no settle). An in-process read removes the network latency
|
|
15
|
-
but NOT HA's async entity-registration lag, so the scene resolver still
|
|
16
|
-
rechecks an EMPTY result ONCE after the same short delay before its naive
|
|
17
|
-
fallback (the automation resolver has no post-upsert lag exposure — its only
|
|
18
|
-
routed call site resolves an already-registered entity before a delete).
|
|
6
|
+
- Entity resolution maps storage keys to live registry entity IDs.
|
|
7
|
+
``entity_registration.resolve_entity_id_after_write`` polls after scene/script
|
|
8
|
+
writes against one deadline. ``_resolve_scene_entity_id`` uses a single retry
|
|
9
|
+
before scene removal; ``_resolve_automation_entity_id`` resolves an existing
|
|
10
|
+
entity before deletion. The component's ``entity_lookup`` returns only matching
|
|
11
|
+
rows instead of a full registry/state listing. A hit is authoritative at once,
|
|
12
|
+
but an empty read can precede HA's asynchronous entity registration even when
|
|
13
|
+
performed in-process, so post-write callers must continue polling.
|
|
19
14
|
- The reference validator (``validate_config_references``) fetches BOTH
|
|
20
15
|
``client.get_services()`` and ``client.get_states()`` on every automation/script
|
|
21
16
|
write purely to build a name index. When the component advertises
|
|
@@ -40,16 +35,11 @@ path runs, NEVER propagated out of the read. Neither consumer's legacy path dies
|
|
|
40
35
|
identically on a pooled-WS drop, so propagating would abort work the legacy path
|
|
41
36
|
still completes:
|
|
42
37
|
|
|
43
|
-
- ``fetch_entity_lookup_via_component``
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
the automation resolver scans REST
|
|
49
|
-
``get_states()`` and additionally catches broadly → ``None``. Its only routed
|
|
50
|
-
call sites run AFTER a scene/automation upsert commits or BEFORE a REST delete,
|
|
51
|
-
so an escaping transport error would report a landed write as failed / abort a
|
|
52
|
-
delete the REST path would have finished.
|
|
38
|
+
- ``fetch_entity_lookup_via_component`` consumers fall back to the legacy
|
|
39
|
+
WebSocket registry bridge or REST state reads. The post-write resolver catches
|
|
40
|
+
known API/transport failures and retains a best-effort entity ID; later wait
|
|
41
|
+
and category operations report any verification or assignment failure. Removal
|
|
42
|
+
resolvers retain their own error policies.
|
|
53
43
|
- ``fetch_reference_data_via_component``'s legacy path is the REST
|
|
54
44
|
``get_services()`` / ``get_states()`` pair; an escaping transport error would
|
|
55
45
|
make ``validate_config_references`` hit its swallow-all fetch guard and skip
|
|
@@ -58,9 +48,9 @@ still completes:
|
|
|
58
48
|
**GET-path invariant:** the automation/script/scene *config-get* tools must never
|
|
59
49
|
route through the component — their in-process ``raw_config`` freshness lags the
|
|
60
50
|
config file between a write and the next completed reload. The resolvers gate the
|
|
61
|
-
whole component branch (caps probe included) behind
|
|
62
|
-
|
|
63
|
-
|
|
51
|
+
whole component branch (caps probe included) behind ``allow_component`` for
|
|
52
|
+
removals. The dedicated post-write resolver is never called from a config-get.
|
|
53
|
+
``TestConfigGetSeam`` pins this.
|
|
64
54
|
"""
|
|
65
55
|
|
|
66
56
|
from __future__ import annotations
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"""Resolve storage keys after writes while Home Assistant registers entities."""
|
|
2
|
+
|
|
3
|
+
import asyncio
|
|
4
|
+
import logging
|
|
5
|
+
import time
|
|
6
|
+
from typing import Any, Literal
|
|
7
|
+
|
|
8
|
+
from ..client.rest_client import (
|
|
9
|
+
HomeAssistantAPIError,
|
|
10
|
+
HomeAssistantAuthError,
|
|
11
|
+
HomeAssistantConnectionError,
|
|
12
|
+
)
|
|
13
|
+
from .component_config_reads import fetch_entity_lookup_via_component
|
|
14
|
+
|
|
15
|
+
logger = logging.getLogger(__name__)
|
|
16
|
+
|
|
17
|
+
# A bounded registration budget, not a fixed delay: existing entries return on
|
|
18
|
+
# the first lookup. Keep this separate from the subsequent state-availability
|
|
19
|
+
# wait, which cannot discover a name-derived or registry-renamed entity ID.
|
|
20
|
+
RESOLVE_TIMEOUT = 5.0
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def _matching_entity_id(
|
|
24
|
+
entries: list[dict[str, Any]], storage_key: str, domain: Literal["scene", "script"]
|
|
25
|
+
) -> str | None:
|
|
26
|
+
"""UI scenes belong to platform homeassistant; scripts belong to script."""
|
|
27
|
+
platform = "homeassistant" if domain == "scene" else "script"
|
|
28
|
+
for entry in entries:
|
|
29
|
+
entity_id = entry.get("entity_id") or ""
|
|
30
|
+
if (
|
|
31
|
+
entry.get("unique_id") == storage_key
|
|
32
|
+
and entry.get("platform") == platform
|
|
33
|
+
and entity_id.startswith(f"{domain}.")
|
|
34
|
+
):
|
|
35
|
+
return str(entity_id)
|
|
36
|
+
return None
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
async def _lookup_entity_id(
|
|
40
|
+
client: Any, storage_key: str, domain: Literal["scene", "script"]
|
|
41
|
+
) -> str | None:
|
|
42
|
+
"""Read once; an unavailable component falls back to the legacy registry."""
|
|
43
|
+
matches = await fetch_entity_lookup_via_component(
|
|
44
|
+
client, storage_key, domain=domain
|
|
45
|
+
)
|
|
46
|
+
if matches is None:
|
|
47
|
+
if domain == "script":
|
|
48
|
+
direct = await client.send_websocket_message(
|
|
49
|
+
{
|
|
50
|
+
"type": "config/entity_registry/get",
|
|
51
|
+
"entity_id": f"script.{storage_key}",
|
|
52
|
+
}
|
|
53
|
+
)
|
|
54
|
+
row = direct.get("result")
|
|
55
|
+
if direct.get("success") and isinstance(row, dict):
|
|
56
|
+
entity_id = _matching_entity_id([row], storage_key, domain)
|
|
57
|
+
if entity_id is not None:
|
|
58
|
+
return entity_id
|
|
59
|
+
listing = await client.send_websocket_message(
|
|
60
|
+
{"type": "config/entity_registry/list"}
|
|
61
|
+
)
|
|
62
|
+
if listing.get("success") is False:
|
|
63
|
+
raise HomeAssistantAPIError(
|
|
64
|
+
f"Entity registry lookup failed: {listing.get('error')} "
|
|
65
|
+
f"(code={listing.get('error_code')})"
|
|
66
|
+
)
|
|
67
|
+
matches = listing.get("result") or []
|
|
68
|
+
return _matching_entity_id(matches, storage_key, domain)
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
async def resolve_entity_id_after_write(
|
|
72
|
+
client: Any,
|
|
73
|
+
storage_key: str,
|
|
74
|
+
domain: Literal["scene", "script"],
|
|
75
|
+
*,
|
|
76
|
+
timeout: float | None = None,
|
|
77
|
+
poll_interval: float = 0.2,
|
|
78
|
+
fallback_entity_id: str | None = None,
|
|
79
|
+
) -> str:
|
|
80
|
+
"""Poll for the actual entity ID before a post-write wait/category update.
|
|
81
|
+
|
|
82
|
+
An empty registry read can precede asynchronous registration even inside
|
|
83
|
+
the component. Retry against one deadline, checking component availability
|
|
84
|
+
on every attempt. A positive budget includes in-flight lookups and sleeps;
|
|
85
|
+
zero requests one lookup without a time limit, for test fixtures. Known
|
|
86
|
+
API failures retain the best-effort fallback. Errors escaping the component
|
|
87
|
+
adapter propagate unless listed below; cancellation always propagates.
|
|
88
|
+
``fallback_entity_id`` overrides the constructed ID on failure; registry
|
|
89
|
+
matching always uses the storage key.
|
|
90
|
+
|
|
91
|
+
Config reads and removals must use their existing resolution paths. Bulk
|
|
92
|
+
writes with neither a state wait nor a category update should skip this
|
|
93
|
+
helper entirely. The optional budget and interval support deterministic
|
|
94
|
+
tests without extending production waits.
|
|
95
|
+
"""
|
|
96
|
+
storage_key = storage_key.removeprefix(f"{domain}.")
|
|
97
|
+
fallback = fallback_entity_id or f"{domain}.{storage_key}"
|
|
98
|
+
budget = RESOLVE_TIMEOUT if timeout is None else timeout
|
|
99
|
+
deadline = time.monotonic() + budget
|
|
100
|
+
try:
|
|
101
|
+
async with asyncio.timeout(budget if budget > 0 else None):
|
|
102
|
+
while True:
|
|
103
|
+
entity_id = await _lookup_entity_id(client, storage_key, domain)
|
|
104
|
+
if entity_id is not None:
|
|
105
|
+
return entity_id
|
|
106
|
+
remaining = deadline - time.monotonic()
|
|
107
|
+
if remaining <= 0:
|
|
108
|
+
break
|
|
109
|
+
await asyncio.sleep(min(poll_interval, remaining))
|
|
110
|
+
if time.monotonic() >= deadline:
|
|
111
|
+
break
|
|
112
|
+
except (
|
|
113
|
+
TimeoutError,
|
|
114
|
+
HomeAssistantAPIError,
|
|
115
|
+
HomeAssistantAuthError,
|
|
116
|
+
HomeAssistantConnectionError,
|
|
117
|
+
) as exc:
|
|
118
|
+
logger.warning(
|
|
119
|
+
"Post-write registry resolve failed for %s.%s (%s: %s); using %s",
|
|
120
|
+
domain,
|
|
121
|
+
storage_key,
|
|
122
|
+
type(exc).__name__,
|
|
123
|
+
exc,
|
|
124
|
+
fallback,
|
|
125
|
+
)
|
|
126
|
+
else:
|
|
127
|
+
logger.debug(
|
|
128
|
+
"Post-write registry budget exhausted for %s.%s; using %s",
|
|
129
|
+
domain,
|
|
130
|
+
storage_key,
|
|
131
|
+
fallback,
|
|
132
|
+
)
|
|
133
|
+
return fallback
|
{ha_mcp_dev-8.4.3.dev2648 → ha_mcp_dev-8.4.3.dev2652}/src/ha_mcp/tools/tools_config_scenes.py
RENAMED
|
@@ -32,6 +32,7 @@ from ..utils.python_sandbox import (
|
|
|
32
32
|
)
|
|
33
33
|
from .auto_backup import with_auto_backup
|
|
34
34
|
from .component_config_reads import fetch_entity_lookup_via_component
|
|
35
|
+
from .entity_registration import resolve_entity_id_after_write
|
|
35
36
|
from .helpers import (
|
|
36
37
|
exception_to_structured_error,
|
|
37
38
|
log_tool_usage,
|
|
@@ -115,10 +116,8 @@ class ConfigSceneTools:
|
|
|
115
116
|
def __init__(self, client: Any) -> None:
|
|
116
117
|
self._client = client
|
|
117
118
|
|
|
118
|
-
#
|
|
119
|
-
#
|
|
120
|
-
# attribute so tests can patch it down to ``0`` instead of waiting 200 ms
|
|
121
|
-
# in suite runs.
|
|
119
|
+
# Short retry retained for config reads and removals; post-write polling
|
|
120
|
+
# has its own deadline in entity_registration.
|
|
122
121
|
_RESOLVE_RETRY_DELAY = 0.2
|
|
123
122
|
|
|
124
123
|
@staticmethod
|
|
@@ -133,53 +132,19 @@ class ConfigSceneTools:
|
|
|
133
132
|
async def _resolve_scene_entity_id(
|
|
134
133
|
self, scene_id: str, *, allow_component: bool = False
|
|
135
134
|
) -> str:
|
|
136
|
-
"""Resolve
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
On a freshly-upserted scene the registry can lag the storage write
|
|
151
|
-
by tens to ~200 ms — the first query returns no match and the naive
|
|
152
|
-
``scene.{scene_id}`` fallback is then chased by
|
|
153
|
-
``wait_for_entity_registered`` to its phantom-404 timeout. Retry
|
|
154
|
-
the registry list once after a short delay so the post-upsert
|
|
155
|
-
callsites see the real entity_id instead of trailing the lookup
|
|
156
|
-
with a phantom (issue #1168 R3 blocker 1).
|
|
157
|
-
|
|
158
|
-
When ``allow_component`` (set/remove/post-write call sites only — a
|
|
159
|
-
config-get must never route through the component, see
|
|
160
|
-
``component_config_reads`` and ``TestConfigGetSeam``) AND the component
|
|
161
|
-
advertises ``entity_lookup``, one in-process
|
|
162
|
-
``entity_lookup(unique_id=scene_id, domain="scene")`` frame replaces the
|
|
163
|
-
whole-registry dump. A hit returns immediately — the in-process read
|
|
164
|
-
needs no settle. But an EMPTY result right after an upsert can be HA's
|
|
165
|
-
async entity-registration lag (#1168) rather than a true absence: the
|
|
166
|
-
in-process read removes the network latency, not the registration lag
|
|
167
|
-
(the upsert and this resolve are separate round-trips). So an empty
|
|
168
|
-
result is rechecked ONCE after ``_RESOLVE_RETRY_DELAY`` — the same delay
|
|
169
|
-
the legacy path uses — before the naive ``scene.{scene_id}`` fallback. If the recheck answers
|
|
170
|
-
AUTHORITATIVELY (component still available) its verdict is final: a hit is
|
|
171
|
-
returned, a genuine empty falls to the naive guess. But if the recheck
|
|
172
|
-
itself returns ``None`` (component went unavailable / errored / downgraded
|
|
173
|
-
mid-retry) the first empty read is NOT authoritative, so resolution drops
|
|
174
|
-
to the legacy list+retry path below (its own retry absorbs the same lag)
|
|
175
|
-
rather than trusting the empty and guessing.
|
|
176
|
-
The component unavailable / errored ⇒ the legacy list+retry path below
|
|
177
|
-
runs unchanged; that is the FIRST-read case (issue #1813 Phase 2).
|
|
178
|
-
|
|
179
|
-
Accepts a bare ``scene_id`` ("movie_night") or a fully-qualified
|
|
180
|
-
``entity_id`` ("scene.movie_night") — the leading ``scene.`` is
|
|
181
|
-
stripped so callers don't accidentally produce ``scene.scene.movie_night``
|
|
182
|
-
on fallback. Mirrors ``rest_client.resolve_scene_id`` ergonomics.
|
|
135
|
+
"""Resolve the entity ID for config reads and removals, with one retry.
|
|
136
|
+
|
|
137
|
+
HA derives scene entity IDs from the name; the storage key remains
|
|
138
|
+
the registry unique_id. Match that key instead of assuming the slug.
|
|
139
|
+
Accept either a bare key or a key prefixed with ``scene.``.
|
|
140
|
+
|
|
141
|
+
Only removals enable ``allow_component``. Config reads use the legacy
|
|
142
|
+
registry path to preserve the GET-path invariant documented in
|
|
143
|
+
``component_config_reads``. An empty component result is rechecked
|
|
144
|
+
once; component unavailability falls through to the legacy path.
|
|
145
|
+
|
|
146
|
+
Post-write waits and categories use ``resolve_entity_id_after_write``:
|
|
147
|
+
their registration window requires deadline-based polling (#2426).
|
|
183
148
|
"""
|
|
184
149
|
scene_id = scene_id.removeprefix("scene.")
|
|
185
150
|
if allow_component:
|
|
@@ -197,8 +162,7 @@ class ConfigSceneTools:
|
|
|
197
162
|
non-authoritative (capability miss, or the recheck went
|
|
198
163
|
unavailable/errored mid-retry), so the caller falls through to the
|
|
199
164
|
legacy registry list+retry path. ``scene_id`` must already have its
|
|
200
|
-
``scene.`` prefix stripped
|
|
201
|
-
full lag-vs-absence reasoning.
|
|
165
|
+
``scene.`` prefix stripped.
|
|
202
166
|
"""
|
|
203
167
|
matches = await fetch_entity_lookup_via_component(
|
|
204
168
|
self._client, scene_id, domain="scene"
|
|
@@ -871,8 +835,10 @@ class ConfigSceneTools:
|
|
|
871
835
|
# post-upsert finalisation the full-config branch runs. Without
|
|
872
836
|
# these, ``wait`` and ``category`` are silently dropped on
|
|
873
837
|
# python_transform calls.
|
|
874
|
-
entity_id =
|
|
875
|
-
resolved_id,
|
|
838
|
+
entity_id = (
|
|
839
|
+
await resolve_entity_id_after_write(self._client, resolved_id, "scene")
|
|
840
|
+
if wait or category
|
|
841
|
+
else f"scene.{resolved_id}"
|
|
876
842
|
)
|
|
877
843
|
if wait:
|
|
878
844
|
try:
|
|
@@ -1152,8 +1118,10 @@ class ConfigSceneTools:
|
|
|
1152
1118
|
# Resolve actual entity_id via registry — HA derives scene
|
|
1153
1119
|
# entity_ids from the 'name' slug, not the scene_id storage key,
|
|
1154
1120
|
# so f"scene.{scene_id}" is wrong whenever a name is supplied.
|
|
1155
|
-
entity_id =
|
|
1156
|
-
resolved_id,
|
|
1121
|
+
entity_id = (
|
|
1122
|
+
await resolve_entity_id_after_write(self._client, resolved_id, "scene")
|
|
1123
|
+
if wait or effective_category
|
|
1124
|
+
else f"scene.{resolved_id}"
|
|
1157
1125
|
)
|
|
1158
1126
|
|
|
1159
1127
|
# Wait for scene to be queryable
|