ha-mcp-dev 9.2.0.dev3435__tar.gz → 9.2.0.dev3439__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-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/PKG-INFO +1 -1
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/pyproject.toml +1 -1
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/pyproject.toml.orig +1 -1
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/backup_entity_ids.py +3 -3
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/backup_zones.py +4 -3
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/config_helpers/core_payload.py +0 -30
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/config_helpers/create.py +5 -14
- ha_mcp_dev-9.2.0.dev3439/src/ha_mcp/tools/config_helpers/icon_route.py +72 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/config_helpers/update.py +35 -12
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/tools_config_helpers.py +1 -1
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/tools_zones.py +99 -41
- ha_mcp_dev-9.2.0.dev3435/src/ha_mcp/tools/config_helpers/icon_route.py +0 -31
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/LICENSE +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/README.md +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/__main__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_pypi_marker +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_rich_compat.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev_security.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/client/mixins/skills.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/jev_search.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/mixins/extensions.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/skills/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/skills/_constants.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/skills/_resources.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/skills/_snapshot.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/skills/_source.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/skills/client.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/skills/extension.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/skills/models.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/shared/_request_clock.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/requirements.txt +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/client.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/server.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_vendor/websockets/version.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/_version.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/app_discovery.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/auth/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/auth/consent_form.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/auth/iss_stamp.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/auth/oidc_compat.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/auth/provider.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/backup_calendar.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/backup_dashboards.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/backup_diff.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/backup_entities.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/backup_files.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/backup_helper_target.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/backup_integrations.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/backup_manager.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/backup_tags.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/backup_todo.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/browser_landing.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/client/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/client/admin_routes.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/client/config_entry_read.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/client/error_log_journald.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/client/event_listeners.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/client/models.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/client/rest_client.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/client/supervisor_client.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/client/websocket_client.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/client/websocket_listener.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/client/websocket_state.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/config.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/config_backup.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/config_meta.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/config_overrides.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/config_registry.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/config_settings.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/dashboard_screenshot/engine_compat.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/dashboard_screenshot/theme_check.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/errors.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/ha_request_queue.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/hacs_auto_refresh.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/http_transport.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/image_info.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/ipv6_lan_guard.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/listen_sockets.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/llm_exposure.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/log_filters.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/mcp_client_context.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/policy/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/policy/approval_queue.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/policy/decision_pin.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/policy/decisions.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/policy/editing.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/policy/evaluator.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/policy/events.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/policy/handlers.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/policy/middleware.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/policy/model.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/policy/mrtr.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/policy/persistence.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/policy/server_channels.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/policy/value_sources.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/py.typed +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/read_only.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/redaction.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/renamed_tools.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-actions.md +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/triggers-and-conditions.md +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/server.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/server_instructions.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/server_lifespan.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/server_tool_text.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/settings_ui/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/settings_ui/_handlers_oauth_callbacks.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/settings_ui/_i18n.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/settings_ui/_persistence.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/settings_ui/_theme.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/settings_ui/locales/README.md +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/settings_ui/locales/az.json +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/settings_ui/locales/de.json +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/settings_ui/locales/en.json +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/settings_ui/locales/es.json +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/settings_ui/locales/hu.json +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/settings_ui/locales/it.json +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/settings_ui/settings.css +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/settings_ui/settings.html +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/settings_ui/settings_js/01_i18n_state.js +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/settings_ui/settings_js/02_tools_restart.js +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/settings_ui/settings_js/03_render_save.js +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/settings_ui/settings_js/04_backups.js +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/settings_ui/settings_js/05_feature_flags.js +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/settings_ui/settings_js/06_policy_cards.js +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/settings_ui/settings_js/07_policy_actions.js +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/settings_ui/settings_js/08_advanced.js +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/settings_ui/settings_js/09_prefs_visibility.js +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/settings_ui/settings_js/10_oauth_callbacks.js +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/smoke_test.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/storage_helper_types.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/strict_bps.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tool_catalog.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tool_dispatch.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/addon_connection_hints.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/area_messages.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/auto_backup.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/automation_errors.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/automation_registry_details.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/backup.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/backup_access.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/backup_on_demand.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/backup_snapshot.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/backup_snapshot_restore.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/best_practice_checker.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/best_practice_result.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/best_practice_variables.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/blueprint_sources.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/blueprint_write.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/bug_report_config.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/bug_report_redaction.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/bug_report_sources.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/bug_report_templates.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/bulk_selector.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/coercion.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/component_api.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/component_automation.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/component_config_entries.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/component_config_reads.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/component_devices.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/component_helper_collections.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/component_registries.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/component_todo.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/config_entry_backup.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/config_entry_flow.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/config_entry_flow_errors.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/config_entry_flow_introspect.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/config_entry_flow_progress.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/config_entry_identity.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/config_file_visibility.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/config_helpers/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/config_helpers/describe.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/config_helpers/flow.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/config_helpers/listing.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/config_helpers/registry.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/config_helpers/schemas.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/config_helpers/typed_config.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/config_helpers/validation.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/config_subentry_restore.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/config_write_errors.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/config_write_helpers.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/core_contract.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/dashboard_card_describe.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/dashboard_list_checks.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/dashboard_read_errors.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/dev_backup.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/device_control.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/device_enrichment.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/diagnostics_helpers.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/energy_preferences.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/entity_expose_batch.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/entity_param_parsing.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/entity_registration.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/entity_removal.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/entity_update_fields.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/error_log_parsing.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/event_call.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/event_listener_fields.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/file_edit_refusal.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/flow_helper_lookup.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/flow_translations.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/hacs_backend.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/hacs_own_repository.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/hacs_registration.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/helper_flows.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/helpers.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/history_response.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/ignored_entries.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/integration_entry_state.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/integration_flow_steps.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/integration_schema.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/integration_ws_commands.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/log_common.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/log_sources.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/log_sources_fault.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/log_sources_logbook.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/radio/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/radio/base.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/radio/matter.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/radio/thread.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/radio/zigbee.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/radio/zwave.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/radio/zwave_parameters.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/recorder_errors.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/reference_validator.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/registry.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/resource_codec.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/resource_patch.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/response_helpers.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/scene_discovery.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/search/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/search/base.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/search/component.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/search/entities.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/search/legacy.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/search/modes.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/search/overview.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/search/response.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/search/state.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/server_version.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/smart_search/_base.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/smart_search/_config.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/smart_search/_flow_helpers.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/statistics_calendar.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/statistics_helpers.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/statistics_resets.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/system_restart.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/tool_hints.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/tools_addons.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/tools_areas.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/tools_blueprints.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/tools_bug_report.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/tools_calendar.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/tools_camera.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/tools_categories.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/tools_code.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/tools_config_automations.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/tools_dev.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/tools_energy.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/tools_entities.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/tools_filesystem.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/tools_groups.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/tools_hacs.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/tools_history.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/tools_integrations.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/tools_labels.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/tools_logs.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/tools_radio.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/tools_registry.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/tools_resources.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/tools_search.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/tools_security_policy.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/tools_service.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/tools_services.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/tools_system.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/tools_themes.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/tools_todo.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/tools_traces.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/tools_updates.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/tools_utility.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/update_categories.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/util_helpers.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/validation_middleware.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/ws_waiters.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/yaml_extra_keys.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/transforms/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/transforms/categorized_search.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/transforms/compact_params.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/transforms/component_helpers.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/transforms/component_search.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/transforms/write_tool_note.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/transport_security.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/update_check.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/utils/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/utils/config_hash.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/utils/config_write_lock.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/utils/dashboard_patch.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/utils/data_paths.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/utils/domain_handlers.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/utils/entity_membership.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/utils/fuzzy_search.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/utils/mcp_client_host.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/utils/operation_manager.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/utils/python_sandbox.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/utils/registry_update_lock.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/utils/skill_loader.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/utils/usage_logger.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/visibility/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/visibility/config_files.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/visibility/enforcement.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/visibility/identifier_aliases.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/visibility/model.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/visibility/persistence.py +0 -0
- {ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/visibility/resolver.py +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "uv_build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "ha-mcp-dev"
|
|
7
|
-
version = "9.2.0.
|
|
7
|
+
version = "9.2.0.dev3439"
|
|
8
8
|
description = "Configure and automate Home Assistant with Claude, ChatGPT, and other AI assistants."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.13,<3.15"
|
|
@@ -4,7 +4,7 @@ build-backend = "uv_build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "ha-mcp-dev"
|
|
7
|
-
version = "9.2.0.
|
|
7
|
+
version = "9.2.0.dev3439"
|
|
8
8
|
description = "Configure and automate Home Assistant with Claude, ChatGPT, and other AI assistants."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
# Upper bound widened to <3.15 so the package installs on Home Assistant's
|
|
@@ -46,9 +46,9 @@ async def with_registry_icon(
|
|
|
46
46
|
"""The stored item plus the icon its entity's registry entry sets, if any.
|
|
47
47
|
|
|
48
48
|
The registry icon is the one the entity shows, and the helper tools write
|
|
49
|
-
it there
|
|
50
|
-
|
|
51
|
-
it. A failed registry read
|
|
49
|
+
it there when Core's schema has no icon field or cannot be read (older
|
|
50
|
+
versions also for zones and on every update), so the stored item alone
|
|
51
|
+
can miss it. A failed registry read
|
|
52
52
|
propagates, so the capture reports it instead of saving a snapshot
|
|
53
53
|
without the icon.
|
|
54
54
|
"""
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
"""The zone a zone tool names, its registry icon, and a removed zone on restore.
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
snapshot records the registry's icon
|
|
3
|
+
A zone's entity can carry an icon override in the entity registry (set with
|
|
4
|
+
ha_set_entity, or by older ha-mcp versions in place of the stored icon), so
|
|
5
|
+
the stored item alone can miss it: the snapshot records the registry's icon
|
|
6
|
+
too. Core's ``zone/update`` needs the
|
|
6
7
|
stored zone; once it was removed, the restore creates it again, and Core takes
|
|
7
8
|
the new zone's id from the slug of its name. Core keeps a removed zone's
|
|
8
9
|
registry entry for 30 days, so a zone created again under its old id in that
|
|
@@ -61,7 +61,6 @@ def merged_update(
|
|
|
61
61
|
name: str | None,
|
|
62
62
|
icon: str | None,
|
|
63
63
|
fields: dict[str, Any],
|
|
64
|
-
entity_id: str,
|
|
65
64
|
) -> dict[str, Any]:
|
|
66
65
|
"""The stored item plus the changes: Core's update writes the whole item.
|
|
67
66
|
|
|
@@ -75,8 +74,6 @@ def merged_update(
|
|
|
75
74
|
body.pop("name", None)
|
|
76
75
|
if name is not None:
|
|
77
76
|
body["name"] = name
|
|
78
|
-
if helper_type == "zone":
|
|
79
|
-
icon = _zone_item_icon(stored, icon, entity_id)
|
|
80
77
|
if icon is not None:
|
|
81
78
|
if icon:
|
|
82
79
|
body["icon"] = icon
|
|
@@ -86,33 +83,6 @@ def merged_update(
|
|
|
86
83
|
return body
|
|
87
84
|
|
|
88
85
|
|
|
89
|
-
def _zone_item_icon(
|
|
90
|
-
stored: dict[str, Any], icon: str | None, entity_id: str
|
|
91
|
-
) -> str | None:
|
|
92
|
-
"""The icon to write into a zone's stored item, ``None`` to leave it (#2643).
|
|
93
|
-
|
|
94
|
-
The zone entity shows the registry icon over the item's, and Core's zone
|
|
95
|
-
update merges into the item and rejects an empty icon, so an icon stored
|
|
96
|
-
there can never be removed. A new icon therefore goes into the item only
|
|
97
|
-
when it already holds one; otherwise the registry alone carries it and
|
|
98
|
-
stays clearable. Clearing an icon the item holds is refused.
|
|
99
|
-
"""
|
|
100
|
-
if not stored.get("icon"):
|
|
101
|
-
return None
|
|
102
|
-
if icon == "":
|
|
103
|
-
raise_tool_error(
|
|
104
|
-
create_error_response(
|
|
105
|
-
ErrorCode.VALIDATION_INVALID_PARAMETER,
|
|
106
|
-
f"The icon of {entity_id} cannot be removed: the zone's stored "
|
|
107
|
-
f"icon ({stored['icon']}) is kept by Home Assistant's zone update "
|
|
108
|
-
"and would show again.",
|
|
109
|
-
context=_simple_helper_error_context("zone", entity_id=entity_id),
|
|
110
|
-
suggestions=["Set a different icon instead of an empty one"],
|
|
111
|
-
)
|
|
112
|
-
)
|
|
113
|
-
return icon
|
|
114
|
-
|
|
115
|
-
|
|
116
86
|
def _reject(helper_type: str, message: str, **context: Any) -> None:
|
|
117
87
|
raise_tool_error(
|
|
118
88
|
create_error_response(
|
{ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/config_helpers/create.py
RENAMED
|
@@ -17,7 +17,7 @@ from ..ws_waiters import wait_for_entity_registered
|
|
|
17
17
|
from .core_payload import (
|
|
18
18
|
with_create_defaults,
|
|
19
19
|
)
|
|
20
|
-
from .icon_route import
|
|
20
|
+
from .icon_route import icon_targets, note_hidden_icon
|
|
21
21
|
from .registry import _ws_error_msg
|
|
22
22
|
from .schemas import (
|
|
23
23
|
_attach_helper_skill,
|
|
@@ -125,24 +125,14 @@ async def _execute_create_simple_helper(
|
|
|
125
125
|
)
|
|
126
126
|
)
|
|
127
127
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
# entity registry (#2643), like the icon of a type whose schema has none or
|
|
131
|
-
# cannot be read.
|
|
132
|
-
item_icon = (
|
|
133
|
-
None
|
|
134
|
-
if helper_type == "zone"
|
|
135
|
-
else await collection_icon(client, helper_type, "create", icon)
|
|
136
|
-
)
|
|
137
|
-
registry_icon = icon if item_icon is None else None
|
|
138
|
-
message = _build_create_message(
|
|
139
|
-
helper_type, name, None if registry_icon else icon, fields
|
|
140
|
-
)
|
|
128
|
+
item_icon, registry_icon = await icon_targets(client, helper_type, "create", icon)
|
|
129
|
+
message = _build_create_message(helper_type, name, item_icon, fields)
|
|
141
130
|
native = await _create_via_component(
|
|
142
131
|
client, helper_type, message, area_id, labels, category, registry_icon
|
|
143
132
|
)
|
|
144
133
|
if native is not None:
|
|
145
134
|
native_data, native_entity_id, native_warnings = native
|
|
135
|
+
await note_hidden_icon(client, native_entity_id, item_icon, native_warnings)
|
|
146
136
|
create_response = _helper_response(
|
|
147
137
|
"create",
|
|
148
138
|
helper_type,
|
|
@@ -212,6 +202,7 @@ async def _execute_create_simple_helper(
|
|
|
212
202
|
registry_icon,
|
|
213
203
|
)
|
|
214
204
|
await _apply_create_category(client, entity_id, category, helper_data, warnings)
|
|
205
|
+
await note_hidden_icon(client, entity_id, item_icon, warnings)
|
|
215
206
|
|
|
216
207
|
create_response = _helper_response(
|
|
217
208
|
"create",
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"""Route a storage helper's icon by the running Core collection's own fields."""
|
|
2
|
+
|
|
3
|
+
from typing import Any
|
|
4
|
+
|
|
5
|
+
from ...client.rest_client import HomeAssistantError
|
|
6
|
+
from ..component_helper_collections import fetch_helper_schemas
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
async def icon_targets(
|
|
10
|
+
client: Any, helper_type: str, action: str, icon: str | None
|
|
11
|
+
) -> tuple[str | None, str | None]:
|
|
12
|
+
"""Where an icon is written: ``(stored item, entity registry)``.
|
|
13
|
+
|
|
14
|
+
The item takes the icon when Core's ``action`` schema for the type
|
|
15
|
+
declares an ``icon`` field (person and tag declare none), and then the
|
|
16
|
+
registry does not: the helper and zone dialogs write the icon only to the
|
|
17
|
+
item, and a registry override would hide every later change made there
|
|
18
|
+
(#3001). A type without the field keeps its icon in the registry.
|
|
19
|
+
|
|
20
|
+
When the schemas cannot be read (no component, or a failed read) or do
|
|
21
|
+
not list the type or action, nothing is guessed: the icon goes to the
|
|
22
|
+
registry, as the entity settings set it, and a cleared icon ('') clears
|
|
23
|
+
both, since clearing only the registry would bring an older stored icon
|
|
24
|
+
back. A zone keeps its icon in the item even then: its schema has always
|
|
25
|
+
declared one, and the Zones editor shows only the stored icon.
|
|
26
|
+
"""
|
|
27
|
+
if icon is None:
|
|
28
|
+
return None, None
|
|
29
|
+
schemas = await fetch_helper_schemas(client)
|
|
30
|
+
fields = schemas.get(helper_type, {}).get(action) if schemas else None
|
|
31
|
+
if isinstance(fields, list):
|
|
32
|
+
if any(isinstance(f, dict) and f.get("name") == "icon" for f in fields):
|
|
33
|
+
return icon, None
|
|
34
|
+
return None, icon
|
|
35
|
+
if helper_type == "zone":
|
|
36
|
+
return icon, None
|
|
37
|
+
return (icon, icon) if icon == "" else (None, icon)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
async def note_hidden_icon(
|
|
41
|
+
client: Any, entity_id: str | None, item_icon: str | None, warnings: list[str]
|
|
42
|
+
) -> None:
|
|
43
|
+
"""Warn when the entity's registry icon hides the icon just stored or
|
|
44
|
+
cleared.
|
|
45
|
+
|
|
46
|
+
The entity shows a registry icon over the stored one, and older ha-mcp
|
|
47
|
+
versions kept icons there (a zone's alone, every helper's on update), so
|
|
48
|
+
a changed or cleared stored icon can stay invisible. The registry read is
|
|
49
|
+
advisory: when it fails the write has still succeeded, so no warning is
|
|
50
|
+
given.
|
|
51
|
+
"""
|
|
52
|
+
if item_icon is None or not entity_id:
|
|
53
|
+
return
|
|
54
|
+
try:
|
|
55
|
+
result = await client.send_websocket_message(
|
|
56
|
+
{"type": "config/entity_registry/get", "entity_id": entity_id}
|
|
57
|
+
)
|
|
58
|
+
except (HomeAssistantError, OSError, TimeoutError):
|
|
59
|
+
return
|
|
60
|
+
entry = result.get("result") if result.get("success") else None
|
|
61
|
+
override = entry.get("icon") if isinstance(entry, dict) else None
|
|
62
|
+
if not override or override == item_icon:
|
|
63
|
+
return
|
|
64
|
+
shown = (
|
|
65
|
+
f"shows its entity registry icon {override} over the stored icon {item_icon}"
|
|
66
|
+
if item_icon
|
|
67
|
+
else f"still shows its entity registry icon {override}"
|
|
68
|
+
)
|
|
69
|
+
warnings.append(
|
|
70
|
+
f"{entity_id} {shown}; clear it with "
|
|
71
|
+
f"ha_set_entity(entity_id='{entity_id}', icon='')."
|
|
72
|
+
)
|
{ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/config_helpers/update.py
RENAMED
|
@@ -22,7 +22,7 @@ from ..config_write_helpers import apply_entity_category
|
|
|
22
22
|
from ..helpers import raise_tool_error, ws_failure_code
|
|
23
23
|
from ..ws_waiters import wait_for_entity_registered
|
|
24
24
|
from .core_payload import merged_update
|
|
25
|
-
from .icon_route import
|
|
25
|
+
from .icon_route import icon_targets, note_hidden_icon
|
|
26
26
|
from .listing import listed_items
|
|
27
27
|
from .registry import _ws_error_msg
|
|
28
28
|
from .schemas import (
|
|
@@ -67,13 +67,12 @@ async def _execute_legacy_update(
|
|
|
67
67
|
entity_id: str,
|
|
68
68
|
unique_id: str,
|
|
69
69
|
name: str | None,
|
|
70
|
-
|
|
70
|
+
item_icon: str | None,
|
|
71
71
|
fields: dict[str, Any],
|
|
72
72
|
) -> dict[str, Any]:
|
|
73
73
|
"""Update through Core's ``<type>/update`` WS command (no component)."""
|
|
74
74
|
stored = await _stored_item(client, helper_type, entity_id, unique_id)
|
|
75
|
-
|
|
76
|
-
body = merged_update(helper_type, stored, name, item_icon, fields, entity_id)
|
|
75
|
+
body = merged_update(helper_type, stored, name, item_icon, fields)
|
|
77
76
|
result = await client.send_websocket_message(
|
|
78
77
|
{**body, "type": f"{helper_type}/update", f"{helper_type}_id": unique_id}
|
|
79
78
|
)
|
|
@@ -246,13 +245,15 @@ async def _execute_update_simple_helper(
|
|
|
246
245
|
)
|
|
247
246
|
|
|
248
247
|
warnings: list[str] = []
|
|
248
|
+
item_icon, registry_icon = await icon_targets(client, helper_type, "update", icon)
|
|
249
249
|
native = await _update_via_component(
|
|
250
250
|
client,
|
|
251
251
|
helper_type,
|
|
252
252
|
entity_id,
|
|
253
253
|
helper_id,
|
|
254
254
|
name,
|
|
255
|
-
|
|
255
|
+
item_icon,
|
|
256
|
+
registry_icon,
|
|
256
257
|
area_id,
|
|
257
258
|
labels,
|
|
258
259
|
category,
|
|
@@ -260,6 +261,7 @@ async def _execute_update_simple_helper(
|
|
|
260
261
|
)
|
|
261
262
|
if native is not None:
|
|
262
263
|
updated_data, entity, warnings = native
|
|
264
|
+
_note_kept_icon(helper_type, item_icon, updated_data, warnings)
|
|
263
265
|
else:
|
|
264
266
|
stored = await stored_helper_target(client, helper_type, helper_id, name)
|
|
265
267
|
if stored is not None:
|
|
@@ -270,13 +272,14 @@ async def _execute_update_simple_helper(
|
|
|
270
272
|
)
|
|
271
273
|
entity, reason = entity_id, None
|
|
272
274
|
updated_data = await _execute_legacy_update(
|
|
273
|
-
client, helper_type, entity or helper_id, unique_id, name,
|
|
275
|
+
client, helper_type, entity or helper_id, unique_id, name, item_icon, fields
|
|
274
276
|
)
|
|
277
|
+
_note_kept_icon(helper_type, item_icon, updated_data, warnings)
|
|
275
278
|
if entity is None:
|
|
276
279
|
given = [
|
|
277
280
|
field
|
|
278
281
|
for field, value in (
|
|
279
|
-
("icon",
|
|
282
|
+
("icon", registry_icon),
|
|
280
283
|
("area", area_id),
|
|
281
284
|
("labels", labels),
|
|
282
285
|
("category", category),
|
|
@@ -298,7 +301,7 @@ async def _execute_update_simple_helper(
|
|
|
298
301
|
await _apply_update_registry_and_category(
|
|
299
302
|
client,
|
|
300
303
|
entity_id,
|
|
301
|
-
|
|
304
|
+
registry_icon,
|
|
302
305
|
area_id,
|
|
303
306
|
labels,
|
|
304
307
|
category,
|
|
@@ -315,6 +318,7 @@ async def _execute_update_simple_helper(
|
|
|
315
318
|
except Exception as e: # noqa: BLE001
|
|
316
319
|
warnings.append(f"Update applied but verification failed: {e}")
|
|
317
320
|
|
|
321
|
+
await note_hidden_icon(client, entity, item_icon, warnings)
|
|
318
322
|
update_response = _helper_response(
|
|
319
323
|
"update",
|
|
320
324
|
helper_type,
|
|
@@ -333,7 +337,8 @@ async def _update_via_component(
|
|
|
333
337
|
entity_id: str,
|
|
334
338
|
helper_id: str,
|
|
335
339
|
name: str | None,
|
|
336
|
-
|
|
340
|
+
item_icon: str | None,
|
|
341
|
+
registry_icon: str | None,
|
|
337
342
|
area_id: str | None,
|
|
338
343
|
labels: list[str] | None,
|
|
339
344
|
category: str | None,
|
|
@@ -353,12 +358,11 @@ async def _update_via_component(
|
|
|
353
358
|
# The component names the item's own entity; without one the storage id
|
|
354
359
|
# names the item, never the caller's guessed entity_id.
|
|
355
360
|
entity_id = item.get("entity_id") or helper_id
|
|
356
|
-
|
|
357
|
-
body = merged_update(helper_type, item["item"], name, item_icon, fields, entity_id)
|
|
361
|
+
body = merged_update(helper_type, item["item"], name, item_icon, fields)
|
|
358
362
|
registry = {
|
|
359
363
|
key: value
|
|
360
364
|
for key, value in (
|
|
361
|
-
("icon",
|
|
365
|
+
("icon", registry_icon),
|
|
362
366
|
("area_id", area_id),
|
|
363
367
|
("labels", labels),
|
|
364
368
|
("category", category),
|
|
@@ -375,3 +379,22 @@ async def _update_via_component(
|
|
|
375
379
|
error_context=_simple_helper_error_context(helper_type, entity_id=entity_id),
|
|
376
380
|
)
|
|
377
381
|
return None if result is None else native_result(result)
|
|
382
|
+
|
|
383
|
+
|
|
384
|
+
def _note_kept_icon(
|
|
385
|
+
helper_type: str,
|
|
386
|
+
item_icon: str | None,
|
|
387
|
+
updated_data: dict[str, Any],
|
|
388
|
+
warnings: list[str],
|
|
389
|
+
) -> None:
|
|
390
|
+
"""Say so when Core kept a stored icon the caller cleared.
|
|
391
|
+
|
|
392
|
+
A zone's update merges into the stored item, so leaving the icon out keeps
|
|
393
|
+
it, as it does when the zone dialog's icon is emptied and saved.
|
|
394
|
+
"""
|
|
395
|
+
if item_icon == "" and updated_data.get("icon"):
|
|
396
|
+
warnings.append(
|
|
397
|
+
f"Home Assistant kept the {helper_type}'s icon "
|
|
398
|
+
f"{updated_data['icon']}: its update keeps a stored icon, as the "
|
|
399
|
+
f"{helper_type} dialog does, so it can be changed but not removed."
|
|
400
|
+
)
|
{ha_mcp_dev-9.2.0.dev3435 → ha_mcp_dev-9.2.0.dev3439}/src/ha_mcp/tools/tools_config_helpers.py
RENAMED
|
@@ -598,7 +598,7 @@ class HelperConfigTools:
|
|
|
598
598
|
icon: Annotated[
|
|
599
599
|
str | None,
|
|
600
600
|
Field(
|
|
601
|
-
description="Material Design Icon (e.g., 'mdi:bell'); '' or ' ' clears it, except a zone's stored icon
|
|
601
|
+
description="Material Design Icon (e.g., 'mdi:bell'); '' or ' ' clears it, except a zone's stored icon, which Home Assistant keeps on update as the zone dialog does: it can be changed but not removed. A storage helper's icon goes into its stored config when Home Assistant's schema for the type has an icon field, as the helper's own dialog stores it, and the entity registry is left alone; otherwise (person, tag, or another type without the ha_mcp_tools component) it goes into the entity registry. An icon override in the entity registry is set or cleared with ha_set_entity. Restoring a storage helper's automatic backup also puts back its registry icon, unless the backup predates registry icons being recorded; a flow helper's backup holds no icon, so its restore does not set one",
|
|
602
602
|
default=None,
|
|
603
603
|
),
|
|
604
604
|
] = None,
|
|
@@ -15,6 +15,7 @@ from ha_mcp._vendor.fastmcp.tools import tool
|
|
|
15
15
|
|
|
16
16
|
from ..backup_helper_target import stored_target
|
|
17
17
|
from ..client.rest_client import (
|
|
18
|
+
_NO_ANSWER_ERRORS,
|
|
18
19
|
HomeAssistantAPIError,
|
|
19
20
|
HomeAssistantAuthError,
|
|
20
21
|
HomeAssistantCommandError,
|
|
@@ -45,6 +46,9 @@ from .ws_waiters import wait_for_entity_removed
|
|
|
45
46
|
|
|
46
47
|
logger = logging.getLogger(__name__)
|
|
47
48
|
|
|
49
|
+
# The zone state attributes that say who is in the zone.
|
|
50
|
+
_OCCUPANCY_ATTRS = ("persons", "device_trackers")
|
|
51
|
+
|
|
48
52
|
|
|
49
53
|
def _build_zone_result(
|
|
50
54
|
zones: list[dict[str, Any]], zone_id: str | None, gaps: list[str] | None = None
|
|
@@ -133,17 +137,33 @@ def _shape_component_zone_record(rec: dict[str, Any]) -> dict[str, Any]:
|
|
|
133
137
|
def _with_registry_icons(
|
|
134
138
|
rows: list[dict[str, Any]], entries: list[dict[str, Any]]
|
|
135
139
|
) -> list[dict[str, Any]]:
|
|
136
|
-
"""The rows with
|
|
137
|
-
|
|
140
|
+
"""The rows with each zone entity's registry icon override as
|
|
141
|
+
``entity_icon``, beside the stored ``icon`` the Zones editor shows: the
|
|
142
|
+
override is what the map and the zone's state show (#3001)."""
|
|
138
143
|
icons = {e.get("entity_id"): e["icon"] for e in entries if e.get("icon")}
|
|
139
144
|
return [
|
|
140
|
-
{**row, "
|
|
145
|
+
{**row, "entity_icon": icons[row["entity_id"]]}
|
|
141
146
|
if row.get("entity_id") in icons
|
|
142
147
|
else row
|
|
143
148
|
for row in rows
|
|
144
149
|
]
|
|
145
150
|
|
|
146
151
|
|
|
152
|
+
def _with_occupancy(
|
|
153
|
+
rows: list[dict[str, Any]], states: list[dict[str, Any]]
|
|
154
|
+
) -> list[dict[str, Any]]:
|
|
155
|
+
"""The rows with who is in each zone, from the zone entity's state: Core
|
|
156
|
+
puts it there for every zone, stored or not, as the Map panel shows it."""
|
|
157
|
+
occupancy = {
|
|
158
|
+
s.get("entity_id"): {
|
|
159
|
+
key: attrs[key] for key in _OCCUPANCY_ATTRS if key in attrs
|
|
160
|
+
}
|
|
161
|
+
for s in states
|
|
162
|
+
if isinstance(s, dict) and isinstance(attrs := s.get("attributes"), dict)
|
|
163
|
+
}
|
|
164
|
+
return [{**row, **occupancy.get(row.get("entity_id"), {})} for row in rows]
|
|
165
|
+
|
|
166
|
+
|
|
147
167
|
def _shape_component_zone_rows(result: dict[str, Any]) -> list[dict[str, Any]]:
|
|
148
168
|
"""Reshape the component's zone ``helpers_list`` result into legacy rows."""
|
|
149
169
|
raw = result.get("helpers")
|
|
@@ -191,6 +211,11 @@ class ZoneTools:
|
|
|
191
211
|
settings) and YAML zones, are listed with ``editable=false`` /
|
|
192
212
|
``source="yaml"``; editable means ha_set_zone and ha_remove_zone can
|
|
193
213
|
change the zone. Each zone carries its entity_id.
|
|
214
|
+
|
|
215
|
+
A stored zone's ``icon`` is the one stored in the zone, which the
|
|
216
|
+
Zones editor shows. ``entity_icon`` is an icon override in the zone
|
|
217
|
+
entity's registry entry: the map and the zone's state show it instead.
|
|
218
|
+
Set or clear the override with ha_set_entity.
|
|
194
219
|
"""
|
|
195
220
|
try:
|
|
196
221
|
# Prefer the ha_mcp_tools component's helpers_list, one call for
|
|
@@ -284,26 +309,69 @@ class ZoneTools:
|
|
|
284
309
|
entries, registry_error = await self._zone_registry()
|
|
285
310
|
except HomeAssistantConnectionError as exc:
|
|
286
311
|
entries, registry_error = [], str(exc)
|
|
287
|
-
|
|
288
|
-
|
|
312
|
+
states_error = None
|
|
313
|
+
try:
|
|
314
|
+
states = await self._zone_states(
|
|
315
|
+
[row["entity_id"] for row in rows if row.get("entity_id")]
|
|
316
|
+
)
|
|
317
|
+
except (HomeAssistantAPIError, HomeAssistantConnectionError) as exc:
|
|
318
|
+
states, states_error = [], str(exc)
|
|
319
|
+
# The listing is complete without the registry and the states; only
|
|
320
|
+
# their icons and persons are missing.
|
|
321
|
+
rows = _with_occupancy(_with_registry_icons(rows, entries), states)
|
|
322
|
+
response = _build_zone_result(rows, zone_id)
|
|
289
323
|
if registry_error:
|
|
290
324
|
response.setdefault("warnings", []).append(
|
|
291
325
|
f"Icons set in the entity registry are missing: {registry_error}"
|
|
292
326
|
)
|
|
327
|
+
if states_error:
|
|
328
|
+
response.setdefault("warnings", []).append(
|
|
329
|
+
f"Who is in each zone (persons) is missing: {states_error}"
|
|
330
|
+
)
|
|
293
331
|
return response
|
|
294
332
|
|
|
295
|
-
async def
|
|
296
|
-
"""
|
|
297
|
-
|
|
333
|
+
async def _component_ws(self) -> Any:
|
|
334
|
+
"""The per-client WebSocket the component commands go over."""
|
|
335
|
+
return await get_websocket_client(
|
|
298
336
|
url=self._client.base_url,
|
|
299
337
|
token=self._client.token,
|
|
300
338
|
verify_ssl=getattr(self._client, "verify_ssl", None),
|
|
301
339
|
)
|
|
302
|
-
|
|
340
|
+
|
|
341
|
+
async def _send_component_zone_list(self) -> dict[str, Any]:
|
|
342
|
+
"""Send one ``ha_mcp_tools/helpers_list`` zone query over the per-client WS."""
|
|
343
|
+
ws = await self._component_ws()
|
|
344
|
+
result: dict[str, Any] = await ws.send_command(
|
|
303
345
|
"ha_mcp_tools/helpers_list",
|
|
304
346
|
helper_types=["zone"],
|
|
305
347
|
include_flow_helpers=False,
|
|
306
348
|
)
|
|
349
|
+
return result
|
|
350
|
+
|
|
351
|
+
async def _zone_states(self, entity_ids: list[str]) -> list[dict[str, Any]]:
|
|
352
|
+
"""The zones' states through the component's targeted read, or every
|
|
353
|
+
state when the component has no ``states`` command or it fails."""
|
|
354
|
+
caps = await get_component_caps(self._client)
|
|
355
|
+
if component_supports(caps, "states"):
|
|
356
|
+
try:
|
|
357
|
+
ws = await self._component_ws()
|
|
358
|
+
raw = await ws.send_command(
|
|
359
|
+
"ha_mcp_tools/states", entity_ids=entity_ids
|
|
360
|
+
)
|
|
361
|
+
found = (raw.get("result") or {}).get("states")
|
|
362
|
+
if isinstance(found, dict):
|
|
363
|
+
return list(found.values())
|
|
364
|
+
logger.warning("ha_mcp_tools/states returned a malformed payload")
|
|
365
|
+
# A raw socket reset reaches here unwrapped (send_command keeps
|
|
366
|
+
# writes at-most-once), and every state is still readable.
|
|
367
|
+
except (HomeAssistantCommandError, *_NO_ANSWER_ERRORS) as exc:
|
|
368
|
+
if is_unknown_command(exc):
|
|
369
|
+
invalidate_caps(self._client)
|
|
370
|
+
logger.warning(
|
|
371
|
+
"ha_mcp_tools/states failed; reading all states: %r", exc
|
|
372
|
+
)
|
|
373
|
+
states: list[dict[str, Any]] = await self._client.get_states()
|
|
374
|
+
return states
|
|
307
375
|
|
|
308
376
|
async def _legacy_zone_result(self, zone_id: str | None) -> dict[str, Any]:
|
|
309
377
|
"""Serve ha_get_zone from Core's own commands."""
|
|
@@ -314,9 +382,9 @@ class ZoneTools:
|
|
|
314
382
|
"""Storage zones from Core's ``zone/list``, then every other zone state.
|
|
315
383
|
|
|
316
384
|
A storage row is the stored body with its registry icon; the home
|
|
317
|
-
zone's and YAML zones' rows are their state attributes
|
|
318
|
-
|
|
319
|
-
``device_trackers``)
|
|
385
|
+
zone's and YAML zones' rows are their state attributes, with
|
|
386
|
+
``friendly_name`` as ``name``. Every row carries who is in the zone
|
|
387
|
+
(``persons``, ``device_trackers``) from its state, ``entity_id``,
|
|
320
388
|
``editable`` and ``source``, like the component's. The registry links a
|
|
321
389
|
storage zone to its entity (its ``unique_id`` is the zone_id); a zone
|
|
322
390
|
state without such an entry is not stored. Returns the rows and the
|
|
@@ -354,19 +422,22 @@ class ZoneTools:
|
|
|
354
422
|
states = await self._client.get_states()
|
|
355
423
|
except (HomeAssistantAPIError, HomeAssistantConnectionError) as exc:
|
|
356
424
|
return rows, [
|
|
357
|
-
|
|
425
|
+
"Zones outside the zone storage such as 'home', and who is in "
|
|
426
|
+
f"each zone, are missing: {exc}"
|
|
358
427
|
]
|
|
428
|
+
rows = _with_occupancy(rows, states)
|
|
359
429
|
stored = set(entity_ids.values())
|
|
360
430
|
for state in states:
|
|
361
431
|
entity_id = state.get("entity_id", "") if isinstance(state, dict) else ""
|
|
362
432
|
if not entity_id.startswith("zone.") or entity_id in stored:
|
|
363
433
|
continue
|
|
364
|
-
attrs = state.get("attributes") or {}
|
|
434
|
+
attrs = dict(state.get("attributes") or {})
|
|
365
435
|
object_id = entity_id.split(".", 1)[1]
|
|
436
|
+
name = attrs.pop("friendly_name", object_id)
|
|
366
437
|
rows.append(
|
|
367
438
|
{
|
|
368
439
|
**attrs,
|
|
369
|
-
"name":
|
|
440
|
+
"name": name,
|
|
370
441
|
"id": object_id,
|
|
371
442
|
"entity_id": entity_id,
|
|
372
443
|
"editable": False,
|
|
@@ -410,17 +481,16 @@ class ZoneTools:
|
|
|
410
481
|
)
|
|
411
482
|
return state
|
|
412
483
|
|
|
413
|
-
async def _resolve_zone(self, zone_id: str) -> tuple[str | None, str
|
|
414
|
-
"""The entity_id
|
|
415
|
-
|
|
484
|
+
async def _resolve_zone(self, zone_id: str) -> tuple[str | None, str]:
|
|
485
|
+
"""The entity_id and storage zone_id of a stored zone, given its
|
|
486
|
+
entity_id or zone_id.
|
|
416
487
|
|
|
417
488
|
Resolved as ``stored_target`` resolves it, and so as the zone backups
|
|
418
489
|
do: a bare ``zone_id`` is a storage id from ``zone/list``, and
|
|
419
490
|
``zone.<name>`` is the zone whose registry entry has that entity_id. A
|
|
420
491
|
renamed entity can carry another zone's id as its name, so a bare id
|
|
421
492
|
never names an entity, and a repeated removal deletes nothing.
|
|
422
|
-
|
|
423
|
-
entry; the icon is also None when the entry sets none. The
|
|
493
|
+
The entity_id is None for a stored zone without a registry entry. The
|
|
424
494
|
home zone and YAML zones are not in the storage; Core gives them no
|
|
425
495
|
``unique_id``, so they have no registry entry.
|
|
426
496
|
"""
|
|
@@ -446,11 +516,7 @@ class ZoneTools:
|
|
|
446
516
|
stored = {str(zone.get("id")) for zone in listed.get("result") or []}
|
|
447
517
|
storage_id, entity = stored_target("zone", zone_id, stored, entries)
|
|
448
518
|
if storage_id in stored:
|
|
449
|
-
|
|
450
|
-
(e.get("icon") for e in entries if e.get("unique_id") == storage_id),
|
|
451
|
-
None,
|
|
452
|
-
)
|
|
453
|
-
return entity, storage_id, icon
|
|
519
|
+
return entity, storage_id
|
|
454
520
|
entity_id = zone_id if zone_id.startswith("zone.") else f"zone.{zone_id}"
|
|
455
521
|
# A registry entry links a stored zone, so only a state without one is
|
|
456
522
|
# a YAML or the home zone.
|
|
@@ -533,7 +599,7 @@ class ZoneTools:
|
|
|
533
599
|
icon: Annotated[
|
|
534
600
|
str | None,
|
|
535
601
|
Field(
|
|
536
|
-
description="Material Design Icon (e.g., 'mdi:briefcase')
|
|
602
|
+
description="Material Design Icon (e.g., 'mdi:briefcase'), stored in the zone as the Home Assistant zone dialog stores it. Home Assistant keeps a zone's stored icon on update: it can be changed but not removed, so '' leaves it. An icon override in the entity registry (ha_get_zone's entity_icon) is set or cleared with ha_set_entity",
|
|
537
603
|
default=None,
|
|
538
604
|
),
|
|
539
605
|
] = None,
|
|
@@ -616,10 +682,8 @@ class ZoneTools:
|
|
|
616
682
|
context={"zone_id": zone_id},
|
|
617
683
|
)
|
|
618
684
|
)
|
|
619
|
-
entity_id, storage_id
|
|
620
|
-
# The helper write path
|
|
621
|
-
# new icon in the registry, where it stays clearable, unless the
|
|
622
|
-
# zone already stores one (#2643). It takes the storage id first.
|
|
685
|
+
entity_id, storage_id = await self._resolve_zone(zone_id)
|
|
686
|
+
# The helper write path takes the storage id first.
|
|
623
687
|
result = await _execute_update_simple_helper(
|
|
624
688
|
self._client,
|
|
625
689
|
"zone",
|
|
@@ -635,20 +699,14 @@ class ZoneTools:
|
|
|
635
699
|
fields,
|
|
636
700
|
)
|
|
637
701
|
response = _zone_write_response(result, storage_id, "updated")
|
|
638
|
-
# The reply holds the stored zone plus the registry fields this
|
|
639
|
-
# write set; the entity shows its registry icon over the stored
|
|
640
|
-
# one, as ha_get_zone reports it. An icon this write set or
|
|
641
|
-
# cleared ('') is already in the reply.
|
|
642
|
-
if icon is None and registry_icon:
|
|
643
|
-
response["zone_data"]["icon"] = registry_icon
|
|
644
702
|
response["updated_fields"] = updated
|
|
645
703
|
return response
|
|
646
704
|
|
|
647
|
-
|
|
705
|
+
# Core's zone/create names any other missing field itself; the
|
|
706
|
+
# shared create path refuses a missing name in its own tool's terms.
|
|
707
|
+
if name is None:
|
|
648
708
|
raise_tool_error(
|
|
649
|
-
create_validation_error(
|
|
650
|
-
"name, latitude, and longitude are required when creating a zone.",
|
|
651
|
-
)
|
|
709
|
+
create_validation_error("name is required when creating a zone.")
|
|
652
710
|
)
|
|
653
711
|
result = await _execute_create_simple_helper(
|
|
654
712
|
self._client,
|
|
@@ -725,7 +783,7 @@ class ZoneTools:
|
|
|
725
783
|
suggestions=["Use ha_get_zone() to find existing zone_ids"],
|
|
726
784
|
context={"operation": "remove_zone"},
|
|
727
785
|
)
|
|
728
|
-
entity_id, storage_id
|
|
786
|
+
entity_id, storage_id = await self._resolve_zone(zone_id)
|
|
729
787
|
result = await self._client.send_websocket_message(
|
|
730
788
|
{"type": "zone/delete", "zone_id": storage_id}
|
|
731
789
|
)
|