ha-mcp-dev 9.1.0.dev3282__tar.gz → 9.1.0.dev3285__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.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/PKG-INFO +1 -1
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/pyproject.toml +1 -1
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/pyproject.toml.orig +1 -1
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/backup_manager.py +8 -9
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/client/rest_client.py +32 -33
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/client/websocket_client.py +2 -2
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/addon_connection_hints.py +23 -1
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/component_api.py +18 -8
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/component_dashboard_edit.py +5 -2
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/component_todo.py +21 -8
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_entry_identity.py +6 -6
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_helpers/registry.py +4 -3
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/dashboard_edit_errors.py +29 -1
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/entity_removal.py +14 -4
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/helpers.py +17 -1
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/log_sources_logbook.py +16 -5
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_addons.py +19 -27
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_config_dashboards.py +2 -3
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_entities.py +3 -3
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/LICENSE +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/README.md +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/__main__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_pypi_marker +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_rich_compat.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev_security.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/mixins/skills.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/jev_search.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/mixins/extensions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/skills/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/skills/_constants.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/skills/_resources.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/skills/_snapshot.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/skills/_source.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/skills/client.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/skills/extension.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/skills/models.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/_request_clock.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/requirements.txt +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/client.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/server.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_vendor/websockets/version.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/_version.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/app_discovery.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/auth/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/auth/consent_form.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/auth/iss_stamp.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/auth/oidc_compat.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/auth/provider.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/backup_dashboards.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/backup_diff.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/backup_entities.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/backup_entity_ids.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/backup_helper_target.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/backup_integrations.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/backup_tags.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/backup_todo.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/backup_zones.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/browser_landing.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/client/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/client/admin_routes.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/client/error_log_journald.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/client/models.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/client/supervisor_client.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/client/websocket_listener.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/config.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/config_backup.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/config_meta.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/config_overrides.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/config_registry.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/config_settings.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/dashboard_screenshot/engine_compat.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/errors.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/ha_request_queue.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/hacs_auto_refresh.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/http_transport.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/image_info.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/ipv6_lan_guard.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/listen_sockets.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/llm_exposure.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/log_filters.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/mcp_client_context.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/policy/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/policy/approval_queue.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/policy/decision_pin.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/policy/decisions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/policy/editing.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/policy/evaluator.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/policy/events.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/policy/handlers.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/policy/middleware.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/policy/model.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/policy/mrtr.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/policy/persistence.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/policy/server_channels.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/policy/value_sources.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/py.typed +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/read_only.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/redaction.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/renamed_tools.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-actions.md +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/triggers-and-conditions.md +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/server.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/server_instructions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/server_lifespan.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/server_tool_text.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/_handlers_oauth_callbacks.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/_i18n.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/_persistence.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/_theme.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/locales/README.md +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/locales/az.json +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/locales/de.json +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/locales/en.json +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/locales/es.json +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/locales/it.json +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/settings.css +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/settings.html +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/settings_js/01_i18n_state.js +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/settings_js/02_tools_restart.js +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/settings_js/03_render_save.js +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/settings_js/04_backups.js +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/settings_js/05_feature_flags.js +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/settings_js/06_policy_cards.js +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/settings_js/07_policy_actions.js +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/settings_js/08_advanced.js +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/settings_js/09_prefs_visibility.js +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/settings_ui/settings_js/10_oauth_callbacks.js +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/smoke_test.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/storage_helper_types.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/strict_bps.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tool_dispatch.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/area_messages.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/auto_backup.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/backup.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/backup_access.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/backup_on_demand.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/backup_snapshot.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/backup_snapshot_restore.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/best_practice_checker.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/best_practice_result.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/best_practice_variables.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/blueprint_sources.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/blueprint_write.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/bug_report_config.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/bug_report_redaction.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/bug_report_sources.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/bug_report_templates.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/bulk_selector.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/coercion.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/component_config_entries.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/component_config_reads.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/component_devices.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/component_helper_collections.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/component_registries.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_entry_backup.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_entry_flow.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_entry_flow_introspect.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_file_visibility.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_helpers/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_helpers/core_payload.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_helpers/create.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_helpers/describe.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_helpers/flow.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_helpers/icon_route.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_helpers/listing.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_helpers/schemas.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_helpers/typed_config.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_helpers/update.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_helpers/validation.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_subentry_restore.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_write_errors.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_write_helpers.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/core_contract.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/dashboard_card_describe.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/dashboard_list_checks.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/dashboard_read_errors.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/dev_backup.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/device_control.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/device_enrichment.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/diagnostics_helpers.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/energy_preferences.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/entity_expose_batch.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/entity_param_parsing.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/entity_registration.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/entity_update_fields.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/error_log_parsing.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/flow_helper_lookup.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/hacs_backend.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/hacs_registration.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/helper_flows.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/history_response.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/integration_entry_state.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/log_common.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/log_sources.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/log_sources_fault.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/radio/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/radio/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/radio/matter.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/radio/thread.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/radio/zigbee.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/radio/zwave.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/radio/zwave_parameters.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/recorder_errors.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/reference_validator.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/registry.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/response_helpers.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/scene_discovery.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/search/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/search/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/search/component.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/search/entities.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/search/legacy.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/search/modes.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/search/overview.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/search/response.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/search/state.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/server_version.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/smart_search/_base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/smart_search/_config.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/statistics_calendar.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/statistics_helpers.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/statistics_resets.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/system_restart.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tool_hints.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_areas.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_blueprints.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_bug_report.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_calendar.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_camera.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_categories.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_code.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_config_automations.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_dev.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_energy.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_filesystem.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_groups.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_hacs.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_history.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_integrations.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_labels.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_logs.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_radio.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_registry.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_resources.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_search.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_security_policy.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_service.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_services.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_system.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_themes.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_todo.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_traces.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_updates.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_utility.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/tools_zones.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/update_categories.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/util_helpers.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/validation_middleware.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/ws_waiters.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/transforms/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/transforms/categorized_search.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/transforms/compact_params.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/transforms/component_helpers.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/transforms/component_search.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/transforms/write_tool_note.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/transport_security.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/update_check.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/utils/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/utils/config_hash.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/utils/config_write_lock.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/utils/dashboard_patch.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/utils/data_paths.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/utils/domain_handlers.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/utils/entity_membership.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/utils/fuzzy_search.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/utils/mcp_client_host.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/utils/operation_manager.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/utils/python_sandbox.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/utils/registry_update_lock.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/utils/skill_loader.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/utils/usage_logger.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/visibility/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/visibility/config_files.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/visibility/enforcement.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/visibility/identifier_aliases.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/visibility/model.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/visibility/persistence.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/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.1.0.
|
|
7
|
+
version = "9.1.0.dev3285"
|
|
8
8
|
description = "Home Assistant MCP Server - Complete control of Home Assistant through MCP"
|
|
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.1.0.
|
|
7
|
+
version = "9.1.0.dev3285"
|
|
8
8
|
description = "Home Assistant MCP Server - Complete control of Home Assistant through MCP"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
# Upper bound widened to <3.15 so the package installs on Home Assistant's
|
|
@@ -108,11 +108,12 @@ from .backup_todo import fetch_todo_item, restore_todo_item
|
|
|
108
108
|
from .backup_todo import snapshot_item as todo_snapshot_item
|
|
109
109
|
from .backup_zones import fetch_zone, restore_zone
|
|
110
110
|
from .client.rest_client import (
|
|
111
|
+
HomeAssistantAuthError,
|
|
111
112
|
HomeAssistantCommandError,
|
|
112
113
|
HomeAssistantConnectionError,
|
|
113
114
|
HomeAssistantError,
|
|
114
115
|
)
|
|
115
|
-
from .errors import ErrorCode
|
|
116
|
+
from .errors import ErrorCode, get_error_code
|
|
116
117
|
from .storage_helper_types import SIMPLE_HELPER_TYPES
|
|
117
118
|
from .utils.data_paths import get_data_dir
|
|
118
119
|
from .utils.registry_update_lock import registry_update_lock
|
|
@@ -2021,9 +2022,8 @@ async def _ws_send(client: Any, message: dict[str, Any]) -> Any:
|
|
|
2021
2022
|
client.base_url, client.token, verify_ssl=client.verify_ssl
|
|
2022
2023
|
)
|
|
2023
2024
|
if error or ws_client is None:
|
|
2024
|
-
# ``error`` is
|
|
2025
|
-
#
|
|
2026
|
-
# (flat, as ``create_error_response`` actually produces).
|
|
2025
|
+
# ``error`` is get_connected_ws_client's nested envelope; the flat
|
|
2026
|
+
# ``error["message"]`` read is a defensive fallback.
|
|
2027
2027
|
if isinstance(error, dict):
|
|
2028
2028
|
err_obj = error.get("error", error)
|
|
2029
2029
|
msg = (
|
|
@@ -2031,11 +2031,10 @@ async def _ws_send(client: Any, message: dict[str, Any]) -> Any:
|
|
|
2031
2031
|
) or error.get("message", "WS connect failed")
|
|
2032
2032
|
else:
|
|
2033
2033
|
msg = "WS connect failed"
|
|
2034
|
-
# Typed
|
|
2035
|
-
#
|
|
2036
|
-
|
|
2037
|
-
|
|
2038
|
-
raise HomeAssistantConnectionError(msg)
|
|
2034
|
+
# Typed so ``_CAPTURE_TRANSIENT_ERRORS`` catches it (a bare ``RuntimeError``
|
|
2035
|
+
# would break the best-effort write); a rejected token reports AUTH_*.
|
|
2036
|
+
auth = str(get_error_code(error or {})).startswith("AUTH_")
|
|
2037
|
+
raise (HomeAssistantAuthError if auth else HomeAssistantConnectionError)(msg)
|
|
2039
2038
|
try:
|
|
2040
2039
|
cmd_type = message.pop("type")
|
|
2041
2040
|
envelope = await ws_client.send_command(cmd_type, **message)
|
|
@@ -90,16 +90,17 @@ class HomeAssistantConnectionError(HomeAssistantError):
|
|
|
90
90
|
class HomeAssistantCommandNotSent(HomeAssistantConnectionError):
|
|
91
91
|
"""A WS command that provably never left the process.
|
|
92
92
|
|
|
93
|
-
Raised by ``HomeAssistantWebSocketClient.send_command``
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
93
|
+
Raised by ``HomeAssistantWebSocketClient.send_command``'s entry guard (socket not
|
|
94
|
+
authenticated) and by ``send_websocket_message`` when no attempt obtained a client
|
|
95
|
+
(raised from the acquisition error, so a rejected token survives as ``__cause__``).
|
|
96
|
+
A subclass of ``HomeAssistantConnectionError``, so broad handlers are unaffected,
|
|
97
|
+
yet a write consumer can catch it FIRST: the write provably never happened, so a
|
|
98
|
+
legacy first fire cannot double-apply. Check ``__cause__`` before such a fallback:
|
|
99
|
+
resending a rejected token over REST adds a 401 toward Home Assistant's IP ban. A
|
|
100
|
+
``send_json_message`` failure is NOT this type: ``websocket.send()`` raising does
|
|
101
|
+
not prove the frame was untransmitted (bytes may already be on the socket when the
|
|
102
|
+
close surfaces), so send_command re-raises the original exception and the consumer
|
|
103
|
+
treats it as ambiguous. A post-send socket close (mid-await) likewise raises a plain
|
|
103
104
|
``HomeAssistantConnectionError`` (the close handler sets it on the pending future),
|
|
104
105
|
so type alone distinguishes never-sent from sent-then-dropped/ambiguous.
|
|
105
106
|
"""
|
|
@@ -1955,12 +1956,11 @@ class HomeAssistantClient:
|
|
|
1955
1956
|
|
|
1956
1957
|
max_retries = 2
|
|
1957
1958
|
retry_delay = 0.5 # seconds
|
|
1959
|
+
# Whether an earlier attempt got past acquisition, so may have sent.
|
|
1960
|
+
sent_before = False
|
|
1958
1961
|
|
|
1959
1962
|
for attempt in range(max_retries):
|
|
1960
1963
|
# Whether the failure happened before a usable connection existed.
|
|
1961
|
-
# Failing to obtain one is transport death whatever class the
|
|
1962
|
-
# manager raises; an auth failure or the pool-lock guard's bare
|
|
1963
|
-
# ``Exception`` is not a connection error; type cannot decide this.
|
|
1964
1964
|
acquiring = True
|
|
1965
1965
|
try:
|
|
1966
1966
|
# Use per-client WebSocket keyed to this client's credentials
|
|
@@ -1996,34 +1996,33 @@ class HomeAssistantClient:
|
|
|
1996
1996
|
f"retrying after {retry_delay}s: {error_str}"
|
|
1997
1997
|
)
|
|
1998
1998
|
await asyncio.sleep(retry_delay)
|
|
1999
|
+
sent_before = sent_before or not acquiring
|
|
1999
2000
|
continue
|
|
2000
2001
|
|
|
2001
2002
|
# Phase first, type second. Failing before a client exists is
|
|
2002
|
-
# evidence
|
|
2003
|
-
#
|
|
2004
|
-
#
|
|
2005
|
-
#
|
|
2006
|
-
# ``
|
|
2007
|
-
#
|
|
2008
|
-
# rather than wrapping it, to keep at-most-once semantics for
|
|
2009
|
-
# write callers, so those arrive here untranslated. Anything
|
|
2010
|
-
# else (a ``ValueError`` from building the message, say) is a
|
|
2011
|
-
# bug rather than evidence about the connection.
|
|
2003
|
+
# transport evidence whatever was raised: an auth failure or the
|
|
2004
|
+
# pool-lock guard's bare ``Exception`` is no no-answer class.
|
|
2005
|
+
# Past acquisition only those classes count (``send_command``
|
|
2006
|
+
# re-raises the original ``ConnectionClosed`` /
|
|
2007
|
+
# ``ConnectionResetError`` to keep writes at-most-once); anything
|
|
2008
|
+
# else is Home Assistant's own answer or a local bug.
|
|
2012
2009
|
if acquiring or isinstance(e, _NO_ANSWER_ERRORS):
|
|
2013
2010
|
# One error channel for "no answer came back" (#1947): the
|
|
2014
|
-
# caller decides the policy
|
|
2015
|
-
#
|
|
2016
|
-
#
|
|
2017
|
-
#
|
|
2018
|
-
# they skipped; callers whose output would read as a
|
|
2019
|
-
# negative finding let it propagate.
|
|
2011
|
+
# caller decides the policy. Callers that legitimately continue
|
|
2012
|
+
# on a missing answer catch this and say in ``warnings`` what
|
|
2013
|
+
# they skipped; callers whose output would read as a negative
|
|
2014
|
+
# finding let it propagate.
|
|
2020
2015
|
logger.error(
|
|
2021
2016
|
f"WebSocket transport failed ({message.get('type')}): {e}"
|
|
2022
2017
|
)
|
|
2023
|
-
if
|
|
2024
|
-
#
|
|
2025
|
-
|
|
2026
|
-
|
|
2018
|
+
if acquiring and not sent_before:
|
|
2019
|
+
# No attempt obtained a client, so nothing was sent.
|
|
2020
|
+
raise HomeAssistantCommandNotSent(error_str) from e
|
|
2021
|
+
if isinstance(e, HomeAssistantConnectionError) and not (
|
|
2022
|
+
sent_before and isinstance(e, HomeAssistantCommandNotSent)
|
|
2023
|
+
):
|
|
2024
|
+
# Re-raised unchanged so subtypes and the traceback
|
|
2025
|
+
# survive; not "never sent" once an attempt may have sent.
|
|
2027
2026
|
raise
|
|
2028
2027
|
raise HomeAssistantConnectionError(error_str) from e
|
|
2029
2028
|
|
|
@@ -764,8 +764,8 @@ class HomeAssistantWebSocketClient:
|
|
|
764
764
|
Response from Home Assistant
|
|
765
765
|
"""
|
|
766
766
|
if not self._state.is_ready:
|
|
767
|
-
# PRE-SEND and
|
|
768
|
-
#
|
|
767
|
+
# PRE-SEND and send_command's only provably-never-sent site: nothing is
|
|
768
|
+
# transmitted here. Raise the never-sent subtype so an at-most-once write
|
|
769
769
|
# consumer can fall back to legacy safely (a subclass of
|
|
770
770
|
# HomeAssistantConnectionError, so every existing broad handler is
|
|
771
771
|
# unaffected). A later send() failure is NOT never-sent (see below).
|
{ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/addon_connection_hints.py
RENAMED
|
@@ -1,7 +1,29 @@
|
|
|
1
|
-
"""
|
|
1
|
+
"""Failure guidance for Supervisor calls and the app HTTP and WebSocket proxies."""
|
|
2
|
+
|
|
3
|
+
from typing import Any
|
|
2
4
|
|
|
3
5
|
from .._version import is_running_in_addon
|
|
4
6
|
from ..client.rest_client import HomeAssistantClient
|
|
7
|
+
from ..errors import ErrorCode
|
|
8
|
+
|
|
9
|
+
_SUPERVISOR_AVAILABILITY_SUGGESTION = (
|
|
10
|
+
"Check Home Assistant connection and Supervisor availability"
|
|
11
|
+
)
|
|
12
|
+
_APP_SUPPORT_SUGGESTION = "Check that this installation supports apps (add-ons)."
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def add_supervisor_error_suggestions(error_details: dict[str, Any]) -> None:
|
|
16
|
+
"""Add Supervisor guidance to a failed call's error; a refused token says
|
|
17
|
+
nothing about app support, so it gets none."""
|
|
18
|
+
code = str(error_details.get("code", ""))
|
|
19
|
+
if code == ErrorCode.RESOURCE_NOT_FOUND.value:
|
|
20
|
+
error_details["suggestion"] = _SUPERVISOR_AVAILABILITY_SUGGESTION
|
|
21
|
+
error_details["suggestions"] = [_SUPERVISOR_AVAILABILITY_SUGGESTION]
|
|
22
|
+
if not code.startswith("AUTH_"):
|
|
23
|
+
error_details["suggestions"] = [
|
|
24
|
+
*error_details.get("suggestions", []),
|
|
25
|
+
_APP_SUPPORT_SUGGESTION,
|
|
26
|
+
]
|
|
5
27
|
|
|
6
28
|
|
|
7
29
|
def addon_connection_failure_suggestions(
|
|
@@ -158,11 +158,20 @@ class ComponentDiscoveryError(RuntimeError):
|
|
|
158
158
|
|
|
159
159
|
|
|
160
160
|
def _checked_caps(
|
|
161
|
-
client: Any,
|
|
161
|
+
client: Any,
|
|
162
|
+
caps: ComponentCaps | None,
|
|
163
|
+
strict: bool,
|
|
164
|
+
*,
|
|
165
|
+
cause: Exception | None = None,
|
|
162
166
|
) -> ComponentCaps | None:
|
|
163
|
-
"""Keep read fallbacks while exposing failed discovery to write callers.
|
|
167
|
+
"""Keep read fallbacks while exposing failed discovery to write callers.
|
|
168
|
+
|
|
169
|
+
``cause`` is the exception that failed this call's own probe; a strict caller
|
|
170
|
+
gets it as ``__cause__``. A failure cached by an earlier call gets no cause:
|
|
171
|
+
the OAuth proxy client is one cache key for every user's token.
|
|
172
|
+
"""
|
|
164
173
|
if strict and (failure := _PROBE_FAILURES.get(client)):
|
|
165
|
-
raise ComponentDiscoveryError(failure)
|
|
174
|
+
raise ComponentDiscoveryError(failure) from cause
|
|
166
175
|
return caps
|
|
167
176
|
|
|
168
177
|
|
|
@@ -282,6 +291,7 @@ async def get_component_caps(
|
|
|
282
291
|
|
|
283
292
|
With ``strict=True``, failed or malformed discovery raises
|
|
284
293
|
``ComponentDiscoveryError``, including failures cached by earlier read tools.
|
|
294
|
+
When this call's own probe failed, its exception is the ``__cause__``.
|
|
285
295
|
A definitive unknown command, unsupported schema, or valid capability list
|
|
286
296
|
without the requested command still permits legacy routing. The default
|
|
287
297
|
retains best-effort read behavior. Inconclusive failures expire after 30
|
|
@@ -342,8 +352,8 @@ async def get_component_caps(
|
|
|
342
352
|
else:
|
|
343
353
|
_store_transient_negative(client)
|
|
344
354
|
_PROBE_FAILURES[client] = f"{INFO_COMMAND} failed: {exc}"
|
|
345
|
-
return _checked_caps(client, None, strict)
|
|
346
|
-
except (HomeAssistantConnectionError, HomeAssistantCommandTimeout):
|
|
355
|
+
return _checked_caps(client, None, strict, cause=exc)
|
|
356
|
+
except (HomeAssistantConnectionError, HomeAssistantCommandTimeout) as exc:
|
|
347
357
|
logger.debug(
|
|
348
358
|
"%s probe skipped: WS unavailable", INFO_COMMAND, exc_info=True
|
|
349
359
|
)
|
|
@@ -351,14 +361,14 @@ async def get_component_caps(
|
|
|
351
361
|
_PROBE_FAILURES[client] = (
|
|
352
362
|
f"{INFO_COMMAND} probe could not reach Home Assistant"
|
|
353
363
|
)
|
|
354
|
-
return _checked_caps(client, None, strict)
|
|
355
|
-
except Exception:
|
|
364
|
+
return _checked_caps(client, None, strict, cause=exc)
|
|
365
|
+
except Exception as exc:
|
|
356
366
|
# Read callers retain best-effort fallback; strict write callers
|
|
357
367
|
# must not confuse an unexpected fault with capability absence.
|
|
358
368
|
logger.debug("%s probe failed unexpectedly", INFO_COMMAND, exc_info=True)
|
|
359
369
|
_store_transient_negative(client)
|
|
360
370
|
_PROBE_FAILURES[client] = f"{INFO_COMMAND} probe failed unexpectedly"
|
|
361
|
-
return _checked_caps(client, None, strict)
|
|
371
|
+
return _checked_caps(client, None, strict, cause=exc)
|
|
362
372
|
|
|
363
373
|
caps = _parse_caps(response)
|
|
364
374
|
if caps is not None and caps.schema_version != SUPPORTED_SCHEMA_VERSION:
|
{ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/component_dashboard_edit.py
RENAMED
|
@@ -14,7 +14,10 @@ from .component_api import (
|
|
|
14
14
|
invalidate_caps,
|
|
15
15
|
is_unknown_command,
|
|
16
16
|
)
|
|
17
|
-
from .dashboard_edit_errors import
|
|
17
|
+
from .dashboard_edit_errors import (
|
|
18
|
+
raise_dashboard_edit_error,
|
|
19
|
+
raise_dashboard_edit_unsent,
|
|
20
|
+
)
|
|
18
21
|
|
|
19
22
|
WS_DASHBOARD_EDIT = "ha_mcp_tools/dashboard_edit"
|
|
20
23
|
_LOGGER = logging.getLogger(__name__)
|
|
@@ -148,7 +151,7 @@ async def edit_dashboard_via_component(
|
|
|
148
151
|
_LOGGER.warning(
|
|
149
152
|
"Unable to prepare the dashboard edit connection", exc_info=True
|
|
150
153
|
)
|
|
151
|
-
|
|
154
|
+
raise_dashboard_edit_unsent(exc, url_path, action, "load_failed")
|
|
152
155
|
|
|
153
156
|
kwargs: dict[str, Any] = {"url_path": url_path}
|
|
154
157
|
if expected_hash is not None:
|
|
@@ -5,24 +5,30 @@ todo services and reads the stored rows back from the list entity.
|
|
|
5
5
|
``todo_item`` returns ``None`` when the component did not run the action, so
|
|
6
6
|
the caller uses Core's WebSocket commands instead: the capability is absent,
|
|
7
7
|
the command was not sent, Core answered ``unknown_command``, or the component
|
|
8
|
-
lacks Core's todo parts. A
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
lacks Core's todo parts. A command not sent because the token was rejected
|
|
9
|
+
raises instead, since those commands would resend the token. A reply with
|
|
10
|
+
``success: False`` is the component's refusal: a check before the write, or
|
|
11
|
+
Core's schema or validation error after which the list's rows were unchanged.
|
|
12
|
+
The one exception is ``move_failed``: the update was applied and the move
|
|
13
|
+
after it failed, as its message says.
|
|
12
14
|
"""
|
|
13
15
|
|
|
14
16
|
from __future__ import annotations
|
|
15
17
|
|
|
16
18
|
from typing import Any
|
|
17
19
|
|
|
18
|
-
from ..client.rest_client import
|
|
20
|
+
from ..client.rest_client import (
|
|
21
|
+
HomeAssistantAuthError,
|
|
22
|
+
HomeAssistantCommandNotSent,
|
|
23
|
+
HomeAssistantError,
|
|
24
|
+
)
|
|
19
25
|
from ..errors import ErrorCode, create_error_response
|
|
20
26
|
from .component_api import (
|
|
21
27
|
component_supports,
|
|
22
28
|
get_component_caps,
|
|
23
29
|
invalidate_caps,
|
|
24
30
|
)
|
|
25
|
-
from .helpers import raise_tool_error
|
|
31
|
+
from .helpers import exception_to_structured_error, raise_tool_error
|
|
26
32
|
|
|
27
33
|
WS_TODO_ITEM = "ha_mcp_tools/todo_item"
|
|
28
34
|
CAPABILITY = "todo_item"
|
|
@@ -44,14 +50,18 @@ async def todo_item(
|
|
|
44
50
|
"""The component's reply to one action on ``entity_id``; None when it did
|
|
45
51
|
not run it. A sent command that got no answer, or that the component
|
|
46
52
|
failed to answer, raises ``HomeAssistantError``: a write's outcome is then
|
|
47
|
-
unknown.
|
|
53
|
+
unknown. A command not sent because the token was rejected raises
|
|
54
|
+
``HomeAssistantCommandNotSent``."""
|
|
48
55
|
if not component_supports(await get_component_caps(client), CAPABILITY):
|
|
49
56
|
return None
|
|
50
57
|
try:
|
|
51
58
|
result = await client.send_websocket_message(
|
|
52
59
|
{"type": WS_TODO_ITEM, "entity_id": entity_id, "action": action, **fields}
|
|
53
60
|
)
|
|
54
|
-
except HomeAssistantCommandNotSent:
|
|
61
|
+
except HomeAssistantCommandNotSent as exc:
|
|
62
|
+
if isinstance(exc.__cause__, HomeAssistantAuthError):
|
|
63
|
+
# Core's WebSocket commands would resend the rejected token.
|
|
64
|
+
raise
|
|
55
65
|
return None
|
|
56
66
|
if not result.get("success"):
|
|
57
67
|
if result.get("error_code") == "unknown_command":
|
|
@@ -73,6 +83,9 @@ async def todo_call(
|
|
|
73
83
|
sent without an answer is reported as unknown."""
|
|
74
84
|
try:
|
|
75
85
|
reply = await todo_item(client, entity_id, action, **fields)
|
|
86
|
+
except HomeAssistantCommandNotSent as e:
|
|
87
|
+
# Nothing was sent, so the outcome is known.
|
|
88
|
+
exception_to_structured_error(e, context={"entity_id": entity_id})
|
|
76
89
|
except HomeAssistantError as e:
|
|
77
90
|
if action == "resolve":
|
|
78
91
|
raise
|
{ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_entry_identity.py
RENAMED
|
@@ -319,12 +319,12 @@ async def _registry_rows(
|
|
|
319
319
|
type(err).__name__,
|
|
320
320
|
err,
|
|
321
321
|
)
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
322
|
+
if isinstance(err, HomeAssistantConnectionError):
|
|
323
|
+
# Re-raised as is: chaining it to itself would drop its cause, such
|
|
324
|
+
# as the auth error behind a token rejected on reconnect.
|
|
325
|
+
raise
|
|
326
|
+
raise HomeAssistantConnectionError(
|
|
327
|
+
f"{method_name} transport unavailable for {entry_id}"
|
|
328
328
|
) from err
|
|
329
329
|
if not isinstance(result, list) or any(not isinstance(row, dict) for row in result):
|
|
330
330
|
raise HomeAssistantAPIError(
|
{ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/config_helpers/registry.py
RENAMED
|
@@ -243,9 +243,10 @@ def _apply_registry_check(
|
|
|
243
243
|
if fail_closed and not ok:
|
|
244
244
|
if exc is not None:
|
|
245
245
|
# The transport wrap re-raises acquisition failures as
|
|
246
|
-
#
|
|
247
|
-
#
|
|
248
|
-
#
|
|
246
|
+
# HomeAssistantCommandNotSent (a plain HomeAssistantConnectionError
|
|
247
|
+
# once an earlier attempt obtained a client) ``from`` the original
|
|
248
|
+
# exception (phase-before-type, pinned by
|
|
249
|
+
# test_failure_to_acquire_a_client_is_not_sent), so an auth rejection
|
|
249
250
|
# during connect survives only in the ``__cause__`` chain —
|
|
250
251
|
# discriminate on it the same way the envelope branch below
|
|
251
252
|
# discriminates on ``error_code``.
|
{ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/dashboard_edit_errors.py
RENAMED
|
@@ -7,9 +7,14 @@ from typing import Any, NoReturn
|
|
|
7
7
|
|
|
8
8
|
from ha_mcp._vendor.fastmcp.exceptions import ToolError
|
|
9
9
|
|
|
10
|
+
from ..client.rest_client import HomeAssistantAuthError
|
|
10
11
|
from ..errors import ErrorCode, create_error_response, get_error_code, get_error_message
|
|
11
12
|
from .dashboard_read_errors import CONFIG_NOT_FOUND_CODE
|
|
12
|
-
from .helpers import
|
|
13
|
+
from .helpers import (
|
|
14
|
+
exception_to_structured_error,
|
|
15
|
+
extract_tool_error_message,
|
|
16
|
+
raise_tool_error,
|
|
17
|
+
)
|
|
13
18
|
|
|
14
19
|
_MODE_SUGGESTIONS = [
|
|
15
20
|
"Use a storage-mode dashboard created through the Home Assistant UI or API",
|
|
@@ -106,6 +111,29 @@ def raise_dashboard_edit_error(
|
|
|
106
111
|
)
|
|
107
112
|
|
|
108
113
|
|
|
114
|
+
def raise_dashboard_edit_unsent(
|
|
115
|
+
exc: Exception, url_path: str | None, action: str, reason: str
|
|
116
|
+
) -> NoReturn:
|
|
117
|
+
"""Raise for an edit that failed before anything was sent; a token rejected
|
|
118
|
+
on connect (the error itself or its ``__cause__``) is reported as that auth
|
|
119
|
+
error instead of under the code ``reason`` maps to. That includes a token
|
|
120
|
+
rejected on this call's capability probe; a probe failure cached by an
|
|
121
|
+
earlier call arrives without a cause and keeps ``reason``'s code."""
|
|
122
|
+
auth = exc if isinstance(exc, HomeAssistantAuthError) else exc.__cause__
|
|
123
|
+
if isinstance(auth, HomeAssistantAuthError):
|
|
124
|
+
exception_to_structured_error(
|
|
125
|
+
auth,
|
|
126
|
+
context={
|
|
127
|
+
"action": action,
|
|
128
|
+
"url_path": url_path,
|
|
129
|
+
"reason": reason,
|
|
130
|
+
"write_committed": False,
|
|
131
|
+
"post_write_verified": False,
|
|
132
|
+
},
|
|
133
|
+
)
|
|
134
|
+
raise_dashboard_edit_error(url_path, reason, str(exc), False, action)
|
|
135
|
+
|
|
136
|
+
|
|
109
137
|
def raise_dashboard_edit_fetch_error(
|
|
110
138
|
exc: ToolError, url_path: str, action: str
|
|
111
139
|
) -> NoReturn:
|
|
@@ -12,10 +12,15 @@ from __future__ import annotations
|
|
|
12
12
|
from collections.abc import Callable
|
|
13
13
|
from typing import Any
|
|
14
14
|
|
|
15
|
-
from ..client.rest_client import
|
|
15
|
+
from ..client.rest_client import (
|
|
16
|
+
HomeAssistantCommandNotSent,
|
|
17
|
+
HomeAssistantConnectionError,
|
|
18
|
+
HomeAssistantError,
|
|
19
|
+
)
|
|
16
20
|
from ..errors import ErrorCode
|
|
17
21
|
from .config_helpers.listing import listed_items
|
|
18
22
|
from .config_helpers.schemas import SIMPLE_HELPER_TYPES
|
|
23
|
+
from .helpers import exception_to_structured_error
|
|
19
24
|
|
|
20
25
|
|
|
21
26
|
def _unread(entity_id: str, reason: Any) -> list[str]:
|
|
@@ -82,7 +87,8 @@ async def remove_registry_entries(
|
|
|
82
87
|
) -> dict[str, Any]:
|
|
83
88
|
"""Remove each id in turn; each lands in ``removed``, ``skipped`` (Core's
|
|
84
89
|
not_found: already absent) or ``errors``. A lost connection stops the run
|
|
85
|
-
and lists the ids it never
|
|
90
|
+
and lists the ids it never sent, which are safe to retry: the ones after the
|
|
91
|
+
failing id, and the failing id too when its command provably never left."""
|
|
86
92
|
removed: list[str] = []
|
|
87
93
|
skipped: list[str] = []
|
|
88
94
|
errors: list[dict[str, str]] = []
|
|
@@ -93,14 +99,18 @@ async def remove_registry_entries(
|
|
|
93
99
|
{"type": "config/entity_registry/remove", "entity_id": eid}
|
|
94
100
|
)
|
|
95
101
|
except HomeAssistantConnectionError as exc:
|
|
102
|
+
# CONNECTION_FAILED, CONNECTION_TIMEOUT for a timed-out command,
|
|
103
|
+
# or AUTH_* when the token was rejected on reconnect.
|
|
104
|
+
structured = exception_to_structured_error(exc, raise_error=False)
|
|
96
105
|
errors.append(
|
|
97
106
|
{
|
|
98
107
|
"entity_id": eid,
|
|
99
|
-
"code":
|
|
108
|
+
"code": structured["error"]["code"],
|
|
100
109
|
"message": str(exc),
|
|
101
110
|
}
|
|
102
111
|
)
|
|
103
|
-
|
|
112
|
+
unsent = isinstance(exc, HomeAssistantCommandNotSent)
|
|
113
|
+
not_attempted = list(entity_ids[index if unsent else index + 1 :])
|
|
104
114
|
break
|
|
105
115
|
if result.get("success"):
|
|
106
116
|
removed.append(eid)
|
|
@@ -22,6 +22,7 @@ from ..client.rest_client import (
|
|
|
22
22
|
HomeAssistantAPIError,
|
|
23
23
|
HomeAssistantAuthError,
|
|
24
24
|
HomeAssistantCommandError,
|
|
25
|
+
HomeAssistantCommandTimeout,
|
|
25
26
|
HomeAssistantConnectionError,
|
|
26
27
|
)
|
|
27
28
|
from ..client.websocket_client import HomeAssistantWebSocketClient
|
|
@@ -321,6 +322,10 @@ async def get_connected_ws_client(
|
|
|
321
322
|
if isinstance(reason, str)
|
|
322
323
|
else "WebSocket connection could not be established"
|
|
323
324
|
)
|
|
325
|
+
if isinstance(ws_client.last_connect_exception, HomeAssistantAuthError):
|
|
326
|
+
return None, create_auth_error(
|
|
327
|
+
"Home Assistant rejected the WebSocket token", details=details
|
|
328
|
+
)
|
|
324
329
|
return None, create_connection_error(
|
|
325
330
|
"Failed to connect to Home Assistant WebSocket",
|
|
326
331
|
details=details,
|
|
@@ -365,9 +370,20 @@ def _classify_exception(
|
|
|
365
370
|
|
|
366
371
|
# Type-based classification
|
|
367
372
|
match error:
|
|
373
|
+
case HomeAssistantConnectionError() if isinstance(
|
|
374
|
+
error.__cause__, HomeAssistantAuthError
|
|
375
|
+
):
|
|
376
|
+
# send_websocket_message wraps a failure to obtain a client in a
|
|
377
|
+
# connection error raised from the original, so a token rejected
|
|
378
|
+
# on (re)connect arrives here wrapped: classify the cause by its
|
|
379
|
+
# own text.
|
|
380
|
+
cause = error.__cause__
|
|
381
|
+
return _classify_exception(cause, str(cause).lower(), error_msg, context)
|
|
368
382
|
case HomeAssistantConnectionError():
|
|
383
|
+
# send_websocket_message raises a command timeout as the cause.
|
|
384
|
+
timeout = isinstance(error.__cause__, HomeAssistantCommandTimeout)
|
|
369
385
|
result = create_connection_error(
|
|
370
|
-
error_msg, timeout="timeout" in error_str, context=context
|
|
386
|
+
error_msg, timeout=timeout or "timeout" in error_str, context=context
|
|
371
387
|
)
|
|
372
388
|
case HomeAssistantAdminRequiredError():
|
|
373
389
|
result = create_error_response(
|
{ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3285}/src/ha_mcp/tools/log_sources_logbook.py
RENAMED
|
@@ -24,6 +24,7 @@ from typing import Any, Literal, NoReturn
|
|
|
24
24
|
from ha_mcp._vendor.fastmcp.exceptions import ToolError
|
|
25
25
|
|
|
26
26
|
from ..client.rest_client import (
|
|
27
|
+
HomeAssistantAuthError,
|
|
27
28
|
HomeAssistantCommandError,
|
|
28
29
|
HomeAssistantCommandTimeout,
|
|
29
30
|
HomeAssistantConnectionError,
|
|
@@ -298,10 +299,12 @@ class LogbookLogSourceMixin:
|
|
|
298
299
|
"""Run the component's Core-processor command, or ``None`` to fall back.
|
|
299
300
|
|
|
300
301
|
``None`` means the component is absent, downgraded (``unknown_command``
|
|
301
|
-
drops the cached capability) or the transport
|
|
302
|
-
|
|
303
|
-
a timeout
|
|
304
|
-
|
|
302
|
+
drops the cached capability) or the transport gave no answer: no
|
|
303
|
+
connection, or one that dropped before the reply. Core's own rejections
|
|
304
|
+
surface unchanged; a timeout (the recorder query still runs inside Home
|
|
305
|
+
Assistant) surfaces instead of falling back, and so does a token
|
|
306
|
+
rejected on the command itself. A token already rejected on the
|
|
307
|
+
capability probe falls back.
|
|
305
308
|
"""
|
|
306
309
|
caps = await get_component_caps(self._client)
|
|
307
310
|
if not component_supports(caps, LOGBOOK_EVENTS_CAPABILITY):
|
|
@@ -314,6 +317,9 @@ class LogbookLogSourceMixin:
|
|
|
314
317
|
except HomeAssistantConnectionError as exc:
|
|
315
318
|
if _wrapped_timeout(exc):
|
|
316
319
|
self._raise_logbook_timeout(command["start_time"], command["end_time"])
|
|
320
|
+
if isinstance(exc.__cause__, HomeAssistantAuthError):
|
|
321
|
+
# The fallbacks would resend the rejected token.
|
|
322
|
+
exception_to_structured_error(exc)
|
|
317
323
|
return None
|
|
318
324
|
except HomeAssistantCommandError as exc:
|
|
319
325
|
if not is_unknown_command(exc):
|
|
@@ -346,7 +352,12 @@ class LogbookLogSourceMixin:
|
|
|
346
352
|
except HomeAssistantConnectionError as exc:
|
|
347
353
|
if _wrapped_timeout(exc):
|
|
348
354
|
self._raise_logbook_timeout(command["start_time"], command["end_time"])
|
|
349
|
-
|
|
355
|
+
if isinstance(exc.__cause__, HomeAssistantAuthError):
|
|
356
|
+
# A token rejected on connect is not a WebSocket outage.
|
|
357
|
+
exception_to_structured_error(
|
|
358
|
+
exc, context={"device_ids": command.get("device_ids")}
|
|
359
|
+
)
|
|
360
|
+
self._raise_logbook_ws_required(command.get("device_ids"), reason=str(exc))
|
|
350
361
|
except HomeAssistantCommandError as exc:
|
|
351
362
|
if not is_unknown_command(exc):
|
|
352
363
|
raise
|