ha-mcp-dev 9.1.0.dev3282__tar.gz → 9.1.0.dev3289__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.dev3289}/PKG-INFO +1 -1
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/pyproject.toml +1 -1
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/pyproject.toml.orig +1 -1
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/backup_manager.py +10 -23
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/client/rest_client.py +86 -104
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/client/websocket_client.py +2 -2
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/server_tool_text.py +7 -7
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/addon_connection_hints.py +23 -1
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/auto_backup.py +6 -6
- ha_mcp_dev-9.1.0.dev3289/src/ha_mcp/tools/automation_errors.py +206 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/best_practice_checker.py +5 -60
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/blueprint_substitute.py +2 -2
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/component_api.py +18 -8
- ha_mcp_dev-9.1.0.dev3289/src/ha_mcp/tools/component_automation.py +92 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/component_config_reads.py +17 -9
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/component_dashboard_edit.py +5 -2
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/component_todo.py +21 -8
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_entry_identity.py +6 -6
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_helpers/registry.py +4 -3
- ha_mcp_dev-9.1.0.dev3289/src/ha_mcp/tools/config_write_errors.py +96 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_write_helpers.py +57 -41
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/dashboard_edit_errors.py +29 -1
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/entity_removal.py +14 -4
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/helpers.py +17 -1
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/log_sources_logbook.py +16 -5
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/reference_validator.py +111 -33
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_addons.py +19 -27
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_blueprints.py +1 -1
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_config_automations.py +630 -859
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_config_dashboards.py +2 -3
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_config_scripts.py +1 -1
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_entities.py +8 -8
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_service.py +1 -1
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/utils/config_hash.py +1 -2
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/visibility/identifier_aliases.py +4 -4
- ha_mcp_dev-9.1.0.dev3282/src/ha_mcp/tools/config_write_errors.py +0 -185
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/LICENSE +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/README.md +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/__main__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_pypi_marker +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_rich_compat.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/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.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/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.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/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.dev3289}/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.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/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.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/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.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/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.dev3289}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/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.dev3289}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/mixins/skills.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/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.dev3289}/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.dev3289}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/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.dev3289}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/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.dev3289}/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.dev3289}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/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.dev3289}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/mixins/extensions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/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.dev3289}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/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.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/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.dev3289}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/skills/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/skills/_constants.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/skills/_resources.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/skills/_snapshot.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/skills/_source.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/skills/client.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/skills/extension.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/skills/models.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/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.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/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.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/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.dev3289}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/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.dev3289}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/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.dev3289}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/_request_clock.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/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.dev3289}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/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.dev3289}/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.dev3289}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/requirements.txt +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/client.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/server.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_vendor/websockets/version.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/_version.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/app_discovery.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/auth/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/auth/consent_form.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/auth/iss_stamp.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/auth/oidc_compat.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/auth/provider.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/backup_dashboards.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/backup_diff.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/backup_entities.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/backup_entity_ids.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/backup_helper_target.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/backup_integrations.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/backup_tags.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/backup_todo.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/backup_zones.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/browser_landing.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/client/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/client/admin_routes.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/client/error_log_journald.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/client/models.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/client/supervisor_client.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/client/websocket_listener.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/config.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/config_backup.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/config_meta.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/config_overrides.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/config_registry.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/config_settings.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/dashboard_screenshot/engine_compat.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/errors.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/ha_request_queue.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/hacs_auto_refresh.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/http_transport.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/image_info.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/ipv6_lan_guard.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/listen_sockets.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/llm_exposure.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/log_filters.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/mcp_client_context.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/policy/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/policy/approval_queue.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/policy/decision_pin.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/policy/decisions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/policy/editing.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/policy/evaluator.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/policy/events.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/policy/handlers.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/policy/middleware.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/policy/model.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/policy/mrtr.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/policy/persistence.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/policy/server_channels.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/policy/value_sources.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/py.typed +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/read_only.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/redaction.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/renamed_tools.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/src/ha_mcp/server.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/server_instructions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/server_lifespan.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/_handlers_oauth_callbacks.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/_i18n.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/_persistence.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/_theme.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/README.md +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/az.json +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/de.json +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/en.json +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/es.json +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/it.json +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/settings.css +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/settings_ui/settings.html +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/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.dev3289}/src/ha_mcp/smoke_test.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/storage_helper_types.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/strict_bps.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tool_dispatch.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/area_messages.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/backup.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/backup_access.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/backup_on_demand.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/backup_snapshot.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/backup_snapshot_restore.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/best_practice_result.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/best_practice_variables.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/blueprint_sources.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/blueprint_write.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/bug_report_config.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/bug_report_redaction.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/bug_report_sources.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/bug_report_templates.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/bulk_selector.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/coercion.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/component_config_entries.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/component_devices.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/component_helper_collections.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/component_registries.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_entry_backup.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_entry_flow.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_entry_flow_introspect.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_file_visibility.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_helpers/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_helpers/core_payload.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_helpers/create.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_helpers/describe.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_helpers/flow.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_helpers/icon_route.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_helpers/listing.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_helpers/schemas.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_helpers/typed_config.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_helpers/update.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_helpers/validation.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/config_subentry_restore.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/core_contract.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/dashboard_card_describe.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/dashboard_list_checks.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/dashboard_read_errors.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/dev_backup.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/device_control.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/device_enrichment.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/diagnostics_helpers.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/energy_preferences.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/entity_expose_batch.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/entity_param_parsing.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/entity_registration.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/entity_update_fields.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/error_log_parsing.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/flow_helper_lookup.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/hacs_backend.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/hacs_registration.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/helper_flows.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/history_response.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/integration_entry_state.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/log_common.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/log_sources.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/log_sources_fault.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/radio/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/radio/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/radio/matter.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/radio/thread.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/radio/zigbee.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/radio/zwave.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/radio/zwave_parameters.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/recorder_errors.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/registry.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/response_helpers.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/scene_discovery.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/search/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/search/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/search/component.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/search/entities.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/search/legacy.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/search/modes.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/search/overview.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/search/response.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/search/state.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/server_version.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/smart_search/_base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/smart_search/_config.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/statistics_calendar.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/statistics_helpers.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/statistics_resets.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/system_restart.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tool_hints.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_areas.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_bug_report.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_calendar.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_camera.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_categories.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_code.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_dev.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_energy.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_filesystem.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_groups.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_hacs.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_history.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_integrations.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_labels.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_logs.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_radio.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_registry.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_resources.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_search.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_security_policy.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_services.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_system.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_themes.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_todo.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_traces.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_updates.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_utility.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/tools_zones.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/update_categories.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/util_helpers.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/validation_middleware.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/tools/ws_waiters.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/transforms/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/transforms/categorized_search.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/transforms/compact_params.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/transforms/component_helpers.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/transforms/component_search.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/transforms/write_tool_note.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/transport_security.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/update_check.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/utils/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/utils/config_write_lock.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/utils/dashboard_patch.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/utils/data_paths.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/utils/domain_handlers.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/utils/entity_membership.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/utils/fuzzy_search.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/utils/mcp_client_host.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/utils/operation_manager.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/utils/python_sandbox.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/utils/registry_update_lock.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/utils/skill_loader.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/utils/usage_logger.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/visibility/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/visibility/config_files.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/visibility/enforcement.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/visibility/model.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/src/ha_mcp/visibility/persistence.py +0 -0
- {ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/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.dev3289"
|
|
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.dev3289"
|
|
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)
|
|
@@ -2071,25 +2070,13 @@ async def _ws_send(client: Any, message: dict[str, Any]) -> Any:
|
|
|
2071
2070
|
|
|
2072
2071
|
|
|
2073
2072
|
async def _fetch_automation(client: Any, entity_id: str) -> Any:
|
|
2074
|
-
"""Fetch
|
|
2075
|
-
|
|
2076
|
-
Applies ``_normalize_config_for_roundtrip`` so the snapshot matches
|
|
2077
|
-
what ``ha_config_get_automation`` returns and round-trips cleanly
|
|
2078
|
-
back through ``ha_config_set_automation`` on restore. Imported lazily
|
|
2079
|
-
to keep the manager import-cycle-free.
|
|
2080
|
-
"""
|
|
2081
|
-
# Lazy import to avoid backup_manager → tools → backup_manager cycle.
|
|
2082
|
-
from .tools.tools_config_automations import _normalize_config_for_roundtrip
|
|
2083
|
-
|
|
2073
|
+
"""Fetch the stored body verbatim."""
|
|
2084
2074
|
try:
|
|
2085
|
-
|
|
2075
|
+
return await client.get_automation_config(entity_id)
|
|
2086
2076
|
except HomeAssistantError as err:
|
|
2087
2077
|
if getattr(err, "status_code", None) == 404:
|
|
2088
2078
|
return None
|
|
2089
2079
|
raise
|
|
2090
|
-
if not isinstance(raw, dict):
|
|
2091
|
-
return raw
|
|
2092
|
-
return _normalize_config_for_roundtrip(raw)
|
|
2093
2080
|
|
|
2094
2081
|
|
|
2095
2082
|
async def _restore_automation(client: Any, entity_id: str, config: Any) -> Any:
|
|
@@ -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
|
"""
|
|
@@ -1376,40 +1377,44 @@ class HomeAssistantClient:
|
|
|
1376
1377
|
# Automation Configuration Management
|
|
1377
1378
|
|
|
1378
1379
|
async def _resolve_automation_id(self, identifier: str) -> str:
|
|
1379
|
-
"""
|
|
1380
|
+
"""Return the config id of ``identifier`` (an entity_id or a config id).
|
|
1380
1381
|
|
|
1381
|
-
|
|
1382
|
-
|
|
1383
|
-
|
|
1384
|
-
Returns:
|
|
1385
|
-
The unique_id for configuration API
|
|
1382
|
+
An entity_id resolves through the entity registry first, so a disabled
|
|
1383
|
+
automation (no state) resolves too; the state's ``id`` attribute is the
|
|
1384
|
+
fallback when the registry does not answer with a ``unique_id``.
|
|
1386
1385
|
|
|
1387
1386
|
Raises:
|
|
1388
1387
|
HomeAssistantAPIError: 404 if not found; other read failures propagate
|
|
1389
1388
|
"""
|
|
1390
|
-
if identifier.startswith("automation."):
|
|
1391
|
-
try:
|
|
1392
|
-
state = await self.get_entity_state(identifier)
|
|
1393
|
-
unique_id = state.get("attributes", {}).get("id")
|
|
1394
|
-
if not unique_id:
|
|
1395
|
-
raise HomeAssistantAPIError(
|
|
1396
|
-
f"Automation {identifier} has no unique_id attribute",
|
|
1397
|
-
status_code=404,
|
|
1398
|
-
)
|
|
1399
|
-
logger.debug(
|
|
1400
|
-
f"Converted entity_id {identifier} to unique_id {unique_id}"
|
|
1401
|
-
)
|
|
1402
|
-
return str(unique_id)
|
|
1403
|
-
except HomeAssistantAPIError as e:
|
|
1404
|
-
if e.status_code != 404: # a failed read is not a missing one
|
|
1405
|
-
raise
|
|
1406
|
-
raise HomeAssistantAPIError(
|
|
1407
|
-
f"Failed to resolve automation {identifier}: {str(e)}",
|
|
1408
|
-
status_code=404,
|
|
1409
|
-
) from e
|
|
1410
|
-
else:
|
|
1411
|
-
# Assume it's already a unique_id
|
|
1389
|
+
if not identifier.startswith("automation."):
|
|
1412
1390
|
return identifier
|
|
1391
|
+
try:
|
|
1392
|
+
entry = await self.send_websocket_message(
|
|
1393
|
+
{"type": "config/entity_registry/get", "entity_id": identifier}
|
|
1394
|
+
)
|
|
1395
|
+
except HomeAssistantConnectionError as e:
|
|
1396
|
+
logger.debug(f"Registry lookup for {identifier} failed: {e}")
|
|
1397
|
+
entry = {}
|
|
1398
|
+
if entry.get("success"):
|
|
1399
|
+
unique_id = (entry.get("result") or {}).get("unique_id")
|
|
1400
|
+
if unique_id:
|
|
1401
|
+
return str(unique_id)
|
|
1402
|
+
try:
|
|
1403
|
+
state = await self.get_entity_state(identifier)
|
|
1404
|
+
except HomeAssistantAPIError as e:
|
|
1405
|
+
if e.status_code != 404: # a failed read is not a missing one
|
|
1406
|
+
raise
|
|
1407
|
+
raise HomeAssistantAPIError(
|
|
1408
|
+
f"Failed to resolve automation {identifier}: {str(e)}",
|
|
1409
|
+
status_code=404,
|
|
1410
|
+
) from e
|
|
1411
|
+
unique_id = state.get("attributes", {}).get("id")
|
|
1412
|
+
if not unique_id:
|
|
1413
|
+
raise HomeAssistantAPIError(
|
|
1414
|
+
f"Automation {identifier} has no unique_id attribute",
|
|
1415
|
+
status_code=404,
|
|
1416
|
+
)
|
|
1417
|
+
return str(unique_id)
|
|
1413
1418
|
|
|
1414
1419
|
async def get_automation_config(self, identifier: str) -> dict[str, Any]:
|
|
1415
1420
|
"""Get automation configuration by unique_id or entity_id.
|
|
@@ -1445,19 +1450,19 @@ class HomeAssistantClient:
|
|
|
1445
1450
|
identifier: str | None = None,
|
|
1446
1451
|
*,
|
|
1447
1452
|
_resolved: bool = False,
|
|
1453
|
+
wait_for_entity: bool = False,
|
|
1448
1454
|
) -> dict[str, Any]:
|
|
1449
1455
|
"""
|
|
1450
1456
|
Create new automation or update existing one.
|
|
1451
1457
|
|
|
1452
1458
|
Args:
|
|
1453
|
-
config: Automation configuration dictionary
|
|
1454
|
-
identifier: Optional automation entity_id or
|
|
1455
|
-
_resolved: When True, ``identifier`` is already the
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
unique_id.
|
|
1459
|
+
config: Automation configuration dictionary, sent as given
|
|
1460
|
+
identifier: Optional automation entity_id or config id (None = create new)
|
|
1461
|
+
_resolved: When True, ``identifier`` is already the config id (the
|
|
1462
|
+
caller resolved it), so the entity_id lookup is skipped. The
|
|
1463
|
+
#1404 config-id mismatch guard below still applies.
|
|
1464
|
+
wait_for_entity: Poll for the entity the write registers, as a
|
|
1465
|
+
creation does, and report it as ``entity_id``.
|
|
1461
1466
|
|
|
1462
1467
|
Returns:
|
|
1463
1468
|
Result with automation unique_id and status
|
|
@@ -1465,19 +1470,14 @@ class HomeAssistantClient:
|
|
|
1465
1470
|
Raises:
|
|
1466
1471
|
HomeAssistantAPIError: If configuration invalid or API error
|
|
1467
1472
|
"""
|
|
1468
|
-
# Generate unique_id for new automation if not provided
|
|
1469
1473
|
if identifier is None:
|
|
1470
1474
|
unique_id = str(int(time.time() * 1000))
|
|
1471
|
-
operation = "created"
|
|
1472
|
-
logger.debug(f"Creating new automation with unique_id: {unique_id}")
|
|
1473
1475
|
else:
|
|
1474
1476
|
unique_id = (
|
|
1475
1477
|
identifier
|
|
1476
1478
|
if _resolved
|
|
1477
1479
|
else await self._resolve_automation_id(identifier)
|
|
1478
1480
|
)
|
|
1479
|
-
operation = "updated"
|
|
1480
|
-
logger.debug(f"Updating automation with unique_id: {unique_id}")
|
|
1481
1481
|
|
|
1482
1482
|
# Reject mismatch between resolved storage key and inner ``config["id"]``.
|
|
1483
1483
|
# HA stores by the inner id field even though the URL carries one too —
|
|
@@ -1490,20 +1490,20 @@ class HomeAssistantClient:
|
|
|
1490
1490
|
"Cannot create automation with explicit config['id']="
|
|
1491
1491
|
f"{config_id!r}: Home Assistant stores by the inner id, "
|
|
1492
1492
|
"which would silently overwrite an existing automation. "
|
|
1493
|
-
"Omit 'id' from config to auto-generate, or pass
|
|
1493
|
+
"Omit 'id' from config to auto-generate, or pass entity_id "
|
|
1494
1494
|
"to update an existing automation.",
|
|
1495
1495
|
status_code=400,
|
|
1496
1496
|
)
|
|
1497
1497
|
raise HomeAssistantAPIError(
|
|
1498
|
-
f"Mismatched automation id:
|
|
1499
|
-
f"
|
|
1498
|
+
f"Mismatched automation id: the target's config id is "
|
|
1499
|
+
f"{unique_id!r}, but config['id']={config_id!r}. "
|
|
1500
1500
|
"Refusing to write to prevent overwriting the wrong automation. "
|
|
1501
|
-
f"Remove 'id' from config or set it to the
|
|
1501
|
+
f"Remove 'id' from config or set it to the target's config id "
|
|
1502
1502
|
f"({unique_id!r}).",
|
|
1503
1503
|
status_code=400,
|
|
1504
1504
|
)
|
|
1505
1505
|
|
|
1506
|
-
#
|
|
1506
|
+
# Core stores by the body's id, so it carries the target's.
|
|
1507
1507
|
if unique_id and "id" not in config:
|
|
1508
1508
|
config = {**config, "id": unique_id}
|
|
1509
1509
|
|
|
@@ -1512,10 +1512,9 @@ class HomeAssistantClient:
|
|
|
1512
1512
|
"POST", f"/config/automation/config/{unique_id}", json=config
|
|
1513
1513
|
)
|
|
1514
1514
|
|
|
1515
|
-
# For new automations, query Home Assistant to get the actual entity_id that was assigned
|
|
1516
1515
|
actual_entity_id = None
|
|
1517
1516
|
entity_not_verified = False
|
|
1518
|
-
if
|
|
1517
|
+
if wait_for_entity:
|
|
1519
1518
|
actual_entity_id = await self._poll_for_automation_entity(unique_id)
|
|
1520
1519
|
if not actual_entity_id:
|
|
1521
1520
|
entity_not_verified = True
|
|
@@ -1524,7 +1523,6 @@ class HomeAssistantClient:
|
|
|
1524
1523
|
"unique_id": unique_id,
|
|
1525
1524
|
"entity_id": actual_entity_id,
|
|
1526
1525
|
"result": response.get("result", "ok"),
|
|
1527
|
-
"operation": operation,
|
|
1528
1526
|
}
|
|
1529
1527
|
if entity_not_verified:
|
|
1530
1528
|
result["entity_not_verified"] = True
|
|
@@ -1532,7 +1530,9 @@ class HomeAssistantClient:
|
|
|
1532
1530
|
except HomeAssistantAPIError as e:
|
|
1533
1531
|
if e.status_code == 400:
|
|
1534
1532
|
raise HomeAssistantAPIError(
|
|
1535
|
-
f"Invalid automation configuration: {str(e)}",
|
|
1533
|
+
f"Invalid automation configuration: {str(e)}",
|
|
1534
|
+
status_code=400,
|
|
1535
|
+
response_data=e.response_data,
|
|
1536
1536
|
) from e
|
|
1537
1537
|
raise
|
|
1538
1538
|
|
|
@@ -1609,27 +1609,11 @@ class HomeAssistantClient:
|
|
|
1609
1609
|
"operation": "deleted",
|
|
1610
1610
|
}
|
|
1611
1611
|
except HomeAssistantAPIError as e:
|
|
1612
|
-
|
|
1613
|
-
|
|
1614
|
-
|
|
1615
|
-
|
|
1616
|
-
|
|
1617
|
-
elif e.status_code == 405:
|
|
1618
|
-
raise HomeAssistantAPIError(
|
|
1619
|
-
f"Cannot delete automation '{identifier}': The HTTP DELETE method is blocked. "
|
|
1620
|
-
f"This typically occurs when running ha-mcp as a Home Assistant add-on, because "
|
|
1621
|
-
f"the Supervisor ingress proxy only allows GET and POST requests. "
|
|
1622
|
-
f"WORKAROUNDS: "
|
|
1623
|
-
f"(1) Use ha-mcp via pip, Docker, or as an external MCP server instead of the add-on. "
|
|
1624
|
-
f"(2) Use a long-lived access token to connect directly to Home Assistant's API. "
|
|
1625
|
-
f"(3) As a fallback, disable the automation and rename it with a 'DELETE_' prefix "
|
|
1626
|
-
f"(e.g., 'DELETE_{identifier}') so you can identify and manually delete it later "
|
|
1627
|
-
f"via the Home Assistant UI (Settings > Automations & Scenes).",
|
|
1628
|
-
status_code=405,
|
|
1629
|
-
) from e
|
|
1630
|
-
raise
|
|
1631
|
-
except Exception as e:
|
|
1632
|
-
if "404" in str(e):
|
|
1612
|
+
# Core's DELETE answers a missing id with 400, not 404.
|
|
1613
|
+
if (
|
|
1614
|
+
e.status_code == 400
|
|
1615
|
+
and (e.response_data or {}).get("message") == "Resource not found"
|
|
1616
|
+
):
|
|
1633
1617
|
raise HomeAssistantAPIError(
|
|
1634
1618
|
f"Automation not found: {identifier} (unique_id: {unique_id})",
|
|
1635
1619
|
status_code=404,
|
|
@@ -1955,12 +1939,11 @@ class HomeAssistantClient:
|
|
|
1955
1939
|
|
|
1956
1940
|
max_retries = 2
|
|
1957
1941
|
retry_delay = 0.5 # seconds
|
|
1942
|
+
# Whether an earlier attempt got past acquisition, so may have sent.
|
|
1943
|
+
sent_before = False
|
|
1958
1944
|
|
|
1959
1945
|
for attempt in range(max_retries):
|
|
1960
1946
|
# 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
1947
|
acquiring = True
|
|
1965
1948
|
try:
|
|
1966
1949
|
# Use per-client WebSocket keyed to this client's credentials
|
|
@@ -1996,34 +1979,33 @@ class HomeAssistantClient:
|
|
|
1996
1979
|
f"retrying after {retry_delay}s: {error_str}"
|
|
1997
1980
|
)
|
|
1998
1981
|
await asyncio.sleep(retry_delay)
|
|
1982
|
+
sent_before = sent_before or not acquiring
|
|
1999
1983
|
continue
|
|
2000
1984
|
|
|
2001
1985
|
# 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.
|
|
1986
|
+
# transport evidence whatever was raised: an auth failure or the
|
|
1987
|
+
# pool-lock guard's bare ``Exception`` is no no-answer class.
|
|
1988
|
+
# Past acquisition only those classes count (``send_command``
|
|
1989
|
+
# re-raises the original ``ConnectionClosed`` /
|
|
1990
|
+
# ``ConnectionResetError`` to keep writes at-most-once); anything
|
|
1991
|
+
# else is Home Assistant's own answer or a local bug.
|
|
2012
1992
|
if acquiring or isinstance(e, _NO_ANSWER_ERRORS):
|
|
2013
1993
|
# 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.
|
|
1994
|
+
# caller decides the policy. Callers that legitimately continue
|
|
1995
|
+
# on a missing answer catch this and say in ``warnings`` what
|
|
1996
|
+
# they skipped; callers whose output would read as a negative
|
|
1997
|
+
# finding let it propagate.
|
|
2020
1998
|
logger.error(
|
|
2021
1999
|
f"WebSocket transport failed ({message.get('type')}): {e}"
|
|
2022
2000
|
)
|
|
2023
|
-
if
|
|
2024
|
-
#
|
|
2025
|
-
|
|
2026
|
-
|
|
2001
|
+
if acquiring and not sent_before:
|
|
2002
|
+
# No attempt obtained a client, so nothing was sent.
|
|
2003
|
+
raise HomeAssistantCommandNotSent(error_str) from e
|
|
2004
|
+
if isinstance(e, HomeAssistantConnectionError) and not (
|
|
2005
|
+
sent_before and isinstance(e, HomeAssistantCommandNotSent)
|
|
2006
|
+
):
|
|
2007
|
+
# Re-raised unchanged so subtypes and the traceback
|
|
2008
|
+
# survive; not "never sent" once an attempt may have sent.
|
|
2027
2009
|
raise
|
|
2028
2010
|
raise HomeAssistantConnectionError(error_str) from e
|
|
2029
2011
|
|
|
@@ -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).
|
|
@@ -213,10 +213,10 @@ SEARCH_KEYWORDS: dict[str, str] = {
|
|
|
213
213
|
LITE_DOCSTRINGS: dict[str, str] = {
|
|
214
214
|
"ha_config_get_automation": (
|
|
215
215
|
"Get a Home Assistant automation configuration by "
|
|
216
|
-
"entity_id or
|
|
217
|
-
"
|
|
218
|
-
"
|
|
219
|
-
"
|
|
216
|
+
"entity_id or config id. Returns the stored config "
|
|
217
|
+
"plus a stable config_hash for use with python_transform on "
|
|
218
|
+
"ha_config_set_automation, the registry entry, and Home "
|
|
219
|
+
"Assistant's validation status.\n\n"
|
|
220
220
|
"For schema and field-level details, see "
|
|
221
221
|
"ha_get_skill_guide."
|
|
222
222
|
),
|
|
@@ -224,14 +224,14 @@ LITE_DOCSTRINGS: dict[str, str] = {
|
|
|
224
224
|
"Create or update a Home Assistant automation.\n\n"
|
|
225
225
|
"Supports three modes: full `config` replacement, surgical "
|
|
226
226
|
"`python_transform` on an existing automation (requires "
|
|
227
|
-
"`
|
|
227
|
+
"`entity_id` and `config_hash` from "
|
|
228
228
|
"ha_config_get_automation), or `take_control_of_blueprint` "
|
|
229
229
|
"to convert a blueprint-backed automation into an editable "
|
|
230
230
|
"standalone one (the UI's Take control action). Omit "
|
|
231
|
-
"`
|
|
231
|
+
"`entity_id` to create a new automation. Reusing an entity_id targets "
|
|
232
232
|
"the same automation; changing its alias requires config_hash from a prior read. "
|
|
233
233
|
"`enabled` turns it on or off and `run_actions` runs it now, with a "
|
|
234
|
-
"write or alone with `
|
|
234
|
+
"write or alone with `entity_id`.\n\n"
|
|
235
235
|
"For schema details, examples, and native-vs-template "
|
|
236
236
|
"guidance, see ha_get_skill_guide or your locally "
|
|
237
237
|
"installed skills."
|
{ha_mcp_dev-9.1.0.dev3282 → ha_mcp_dev-9.1.0.dev3289}/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(
|
|
@@ -108,13 +108,13 @@ def automation_backup_target(kw: dict[str, Any]) -> str:
|
|
|
108
108
|
"""Resolve the actual storage target for an automation write.
|
|
109
109
|
|
|
110
110
|
HA's automation storage uses the body's ``id`` field as the primary
|
|
111
|
-
key (#1404). When the caller passes both ``
|
|
111
|
+
key (#1404). When the caller passes both ``entity_id`` and a
|
|
112
112
|
``config.id`` that differ, HA writes to ``config.id`` — the
|
|
113
113
|
snapshot must capture *that* entity, not the user-provided
|
|
114
|
-
``
|
|
114
|
+
``entity_id`` whose target is left untouched.
|
|
115
115
|
|
|
116
116
|
Returns ``str(config["id"])`` when present, else
|
|
117
|
-
``str(
|
|
117
|
+
``str(entity_id or "")``. Empty string skips capture (matches the
|
|
118
118
|
create path where there's nothing to back up yet).
|
|
119
119
|
|
|
120
120
|
``config`` accepts dict or JSON-string per the tool signature; both
|
|
@@ -130,7 +130,7 @@ def automation_backup_target(kw: dict[str, Any]) -> str:
|
|
|
130
130
|
config_id = config.get("id")
|
|
131
131
|
if config_id:
|
|
132
132
|
return str(config_id)
|
|
133
|
-
# Return the
|
|
133
|
+
# Return the entity_id UNCHANGED — do NOT strip the ``automation.``
|
|
134
134
|
# prefix. Capture and restore resolve the target through
|
|
135
135
|
# ``client.get_automation_config`` -> ``_resolve_automation_id``, which
|
|
136
136
|
# converts an entity_id ("automation.<slug>") to the real numeric
|
|
@@ -142,8 +142,8 @@ def automation_backup_target(kw: dict[str, Any]) -> str:
|
|
|
142
142
|
# would POST to the wrong key and create a stray automation). The
|
|
143
143
|
# doubled domain segment in the snapshot filename
|
|
144
144
|
# ("automation.automation.<slug>.<ts>.yaml") is purely cosmetic and is
|
|
145
|
-
# exactly what the remove path (id_param="
|
|
146
|
-
return _resolve_str(kw.get("
|
|
145
|
+
# exactly what the remove path (id_param="entity_id") already produces.
|
|
146
|
+
return _resolve_str(kw.get("entity_id"))
|
|
147
147
|
|
|
148
148
|
|
|
149
149
|
def with_auto_backup(
|