ha-mcp-dev 9.1.0.dev3242__tar.gz → 9.1.0.dev3249__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.dev3242 → ha_mcp_dev-9.1.0.dev3249}/PKG-INFO +7 -6
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/README.md +6 -5
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/pyproject.toml +1 -1
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/pyproject.toml.orig +1 -1
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/config_settings.py +7 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/errors.py +4 -1
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/hacs_auto_refresh.py +65 -24
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/_handlers_oauth_callbacks.py +2 -1
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/locales/en.json +2 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_helpers/listing.py +14 -6
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/dashboard_card_describe.py +4 -1
- ha_mcp_dev-9.1.0.dev3249/src/ha_mcp/tools/entity_expose_batch.py +67 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/error_log_parsing.py +48 -21
- ha_mcp_dev-9.1.0.dev3249/src/ha_mcp/tools/hacs_backend.py +243 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/hacs_registration.py +39 -65
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/log_sources_fault.py +1 -1
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_bug_report.py +1 -1
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_config_helpers.py +3 -3
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_entities.py +30 -58
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_filesystem.py +4 -4
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_hacs.py +180 -177
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_resources.py +5 -5
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_themes.py +1 -1
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_updates.py +10 -42
- ha_mcp_dev-9.1.0.dev3249/src/ha_mcp/tools/update_categories.py +61 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/update_check.py +2 -1
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/LICENSE +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/__main__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_pypi_marker +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_rich_compat.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev_security.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/mixins/skills.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/jev_search.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/mixins/extensions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/skills/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/skills/_constants.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/skills/_resources.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/skills/_snapshot.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/skills/_source.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/skills/client.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/skills/extension.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/skills/models.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/_request_clock.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/requirements.txt +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/client.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/server.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/version.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_version.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/app_discovery.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/auth/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/auth/consent_form.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/auth/iss_stamp.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/auth/oidc_compat.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/auth/provider.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/backup_dashboards.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/backup_diff.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/backup_entities.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/backup_entity_ids.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/backup_helper_target.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/backup_integrations.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/backup_manager.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/backup_tags.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/backup_zones.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/browser_landing.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/client/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/client/admin_routes.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/client/error_log_journald.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/client/models.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/client/rest_client.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/client/supervisor_client.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/client/websocket_client.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/client/websocket_listener.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/config.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/config_backup.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/config_meta.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/config_overrides.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/config_registry.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/dashboard_screenshot/engine_compat.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/ha_request_queue.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/http_transport.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/image_info.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/llm_exposure.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/log_filters.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/mcp_client_context.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/policy/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/policy/approval_queue.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/policy/decision_pin.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/policy/decisions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/policy/editing.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/policy/evaluator.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/policy/events.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/policy/handlers.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/policy/middleware.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/policy/model.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/policy/mrtr.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/policy/persistence.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/policy/server_channels.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/policy/value_sources.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/py.typed +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/read_only.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/redaction.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/renamed_tools.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-actions.md +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/triggers-and-conditions.md +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/server.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/server_instructions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/server_lifespan.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/server_tool_text.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/_i18n.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/_persistence.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/_theme.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/locales/README.md +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/locales/az.json +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/locales/de.json +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/locales/es.json +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/locales/it.json +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/settings.css +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/settings.html +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/settings_js/01_i18n_state.js +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/settings_js/02_tools_restart.js +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/settings_js/03_render_save.js +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/settings_js/04_backups.js +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/settings_js/05_feature_flags.js +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/settings_js/06_policy_cards.js +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/settings_js/07_policy_actions.js +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/settings_js/08_advanced.js +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/settings_js/09_prefs_visibility.js +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/settings_js/10_oauth_callbacks.js +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/smoke_test.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/storage_helper_types.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/strict_bps.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tool_dispatch.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/addon_connection_hints.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/area_messages.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/auto_backup.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/backup.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/backup_access.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/backup_on_demand.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/backup_snapshot.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/backup_snapshot_restore.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/best_practice_checker.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/best_practice_result.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/best_practice_variables.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/blueprint_sources.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/blueprint_write.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/bug_report_config.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/bug_report_templates.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/bulk_selector.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/coercion.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/component_api.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/component_config_entries.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/component_config_reads.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/component_devices.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/component_helper_collections.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/component_registries.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_entry_backup.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_entry_flow.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_entry_flow_introspect.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_entry_identity.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_file_visibility.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_helpers/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_helpers/core_payload.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_helpers/create.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_helpers/describe.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_helpers/flow.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_helpers/icon_route.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_helpers/registry.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_helpers/schemas.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_helpers/typed_config.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_helpers/update.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_helpers/validation.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_subentry_restore.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_write_errors.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_write_helpers.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/core_contract.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/dashboard_list_checks.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/dashboard_read_errors.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/dev_backup.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/device_control.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/device_enrichment.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/diagnostics_helpers.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/energy_preferences.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/entity_param_parsing.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/entity_registration.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/entity_removal.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/entity_update_fields.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/flow_helper_lookup.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/helper_flows.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/helpers.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/history_response.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/integration_entry_state.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/log_common.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/log_sources.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/log_sources_logbook.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/radio/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/radio/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/radio/matter.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/radio/thread.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/radio/zigbee.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/radio/zwave.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/radio/zwave_parameters.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/recorder_errors.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/reference_validator.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/registry.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/response_helpers.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/scene_discovery.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/search/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/search/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/search/component.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/search/entities.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/search/legacy.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/search/modes.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/search/overview.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/search/response.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/search/state.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/server_version.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/smart_search/_base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/smart_search/_config.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/statistics_calendar.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/statistics_helpers.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/statistics_resets.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/system_restart.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tool_hints.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_addons.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_areas.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_blueprints.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_calendar.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_camera.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_categories.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_code.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_config_automations.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_dev.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_energy.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_groups.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_history.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_integrations.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_labels.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_logs.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_radio.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_registry.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_search.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_security_policy.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_service.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_services.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_system.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_todo.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_traces.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_utility.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_zones.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/util_helpers.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/validation_middleware.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/ws_waiters.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/transforms/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/transforms/categorized_search.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/transforms/compact_params.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/transforms/component_helpers.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/transforms/component_search.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/transforms/write_tool_note.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/transport_security.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/utils/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/utils/config_hash.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/utils/config_write_lock.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/utils/dashboard_patch.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/utils/data_paths.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/utils/domain_handlers.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/utils/entity_membership.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/utils/fuzzy_search.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/utils/mcp_client_host.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/utils/operation_manager.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/utils/python_sandbox.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/utils/registry_update_lock.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/utils/skill_loader.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/utils/usage_logger.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/visibility/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/visibility/config_files.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/visibility/enforcement.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/visibility/identifier_aliases.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/visibility/model.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/visibility/persistence.py +0 -0
- {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/visibility/resolver.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ha-mcp-dev
|
|
3
|
-
Version: 9.1.0.
|
|
3
|
+
Version: 9.1.0.dev3249
|
|
4
4
|
Summary: Home Assistant MCP Server - Complete control of Home Assistant through MCP
|
|
5
5
|
Keywords: mcp,home-assistant,ai,automation,smart-home
|
|
6
6
|
Author: Julien
|
|
@@ -94,9 +94,9 @@ Description-Content-Type: text/markdown
|
|
|
94
94
|
|
|
95
95
|
## 🚀 Get Started
|
|
96
96
|
|
|
97
|
-
The recommended way to run ha-mcp is the **HA-MCP Custom Component**. It installs into Home Assistant through HACS, runs the full server **in-process**, and works on **every** Home Assistant installation type — Home Assistant OS, Supervised, Container, and Core — with full feature parity. It is the easiest setup in every case: setup asks for an administrator access token and how clients may connect.
|
|
97
|
+
The recommended way to run ha-mcp is the **HA-MCP Custom Component**. It installs into Home Assistant through HACS (the built-in Marketplace on Home Assistant 2026.11+), runs the full server **in-process**, and works on **every** Home Assistant installation type — Home Assistant OS, Supervised, Container, and Core — with full feature parity. It is the easiest setup in every case: setup asks for an administrator access token and how clients may connect.
|
|
98
98
|
|
|
99
|
-
**Add it to Home Assistant via HACS (the preferred install):**
|
|
99
|
+
**Add it to Home Assistant via HACS or, on Home Assistant 2026.11+, the Marketplace (the preferred install):**
|
|
100
100
|
|
|
101
101
|
[](https://my.home-assistant.io/redirect/hacs_repository/?owner=homeassistant-ai&repository=ha-mcp&category=integration)
|
|
102
102
|
|
|
@@ -104,7 +104,8 @@ The recommended way to run ha-mcp is the **HA-MCP Custom Component**. It install
|
|
|
104
104
|
|
|
105
105
|
> The setup below is for version 9.0.0 (October 28, 2026) and later; earlier versions show a shorter setup form without the administrator account step.
|
|
106
106
|
|
|
107
|
-
1. Install the **HA-MCP Custom Component** from HACS — click the badge above, or in HACS open **Integrations → ⋮ → Custom repositories**, add `https://github.com/homeassistant-ai/ha-mcp` (category: **Integration**), then **Download**.
|
|
107
|
+
1. Install the **HA-MCP Custom Component**. On **Home Assistant 2026.10 or older**, from HACS — click the badge above, or in HACS open **Integrations → ⋮ → Custom repositories**, add `https://github.com/homeassistant-ai/ha-mcp` (category: **Integration**), then **Download**.
|
|
108
|
+
On **Home Assistant 2026.11 or newer**, HACS is built in as the **Marketplace**: open **Settings → Marketplace** and accept its first-run warning, then **Connect GitHub** (a device sign-in). Adding a custom repository needs it, and until HA-MCP is in the Marketplace catalog it is also what makes the Marketplace check HA-MCP for updates in the background; without it, **Refresh information** on HA-MCP's Marketplace page checks by hand. Then click the badge above, or open the **Add from link** tab and add `https://github.com/homeassistant-ai/ha-mcp` as an **Integration**, and **Install**.
|
|
108
109
|
Already installed from the earlier `homeassistant-ai/ha-mcp-integration` repository? It keeps receiving the same releases; nothing to change.
|
|
109
110
|
2. **Restart Home Assistant.**
|
|
110
111
|
3. Decide which administrator account the server acts as. Either create a long-lived access token on your own account (your profile → **Security** → **Long-lived access tokens** → **Create token**; it works from anywhere if it leaks, and the server's changes show under your name), or, safer, create an account just for HA-MCP under **Settings → People → Add person** with **Allow login**, **Local access only** and **Administrator** on. Never use your own login for the second option.
|
|
@@ -118,7 +119,7 @@ The recommended way to run ha-mcp is the **HA-MCP Custom Component**. It install
|
|
|
118
119
|
- **Local only?** Leave remote access disabled at setup (or turn off **Remote access via webhook** in the entry options) — no webhook is registered at all, while the direct port and sidebar panel keep working.
|
|
119
120
|
- **Settings panel:** while the server runs, an admin-only **HA-MCP** panel appears in the Home Assistant sidebar for managing tools, feature flags, backups, and themes.
|
|
120
121
|
- **Optional authentication:** set **Authentication mode** to `ha_auth` to require a Home Assistant account sign-in instead of using the secret URL as the credential.
|
|
121
|
-
- **Manual install (no HACS):** copy `custom_components/ha_mcp_tools/` from this repository into your Home Assistant `config/custom_components/` directory, then restart and add the integration as above.
|
|
122
|
+
- **Manual install (no HACS or Marketplace):** copy `custom_components/ha_mcp_tools/` from this repository into your Home Assistant `config/custom_components/` directory, then restart and add the integration as above.
|
|
122
123
|
|
|
123
124
|
The component's second entry type, the **File & YAML services entry** (**HA-MCP File & YAML Tools**), is only needed if you enable ha-mcp's opt-in file and YAML editing tools (feature flags, off by default) — skip it otherwise; you can add it later at any time. It works with any server type (in-process, app, Docker, or stdio).
|
|
124
125
|
|
|
@@ -374,7 +375,7 @@ Install the **HA-MCP File & YAML Tools** entry from the same **HA-MCP Custom Com
|
|
|
374
375
|
|
|
375
376
|
[](https://my.home-assistant.io/redirect/hacs_repository/?owner=homeassistant-ai&repository=ha-mcp&category=integration)
|
|
376
377
|
|
|
377
|
-
To add manually: open **HACS** > **Integrations** > three-dot menu > **Custom repositories** > add `https://github.com/homeassistant-ai/ha-mcp` (category: Integration) > **Download**. Or copy `custom_components/ha_mcp_tools/` from this repository into your HA `config/custom_components/` directory.
|
|
378
|
+
To add manually on Home Assistant 2026.10 or older: open **HACS** > **Integrations** > three-dot menu > **Custom repositories** > add `https://github.com/homeassistant-ai/ha-mcp` (category: Integration) > **Download**. On 2026.11 or newer: in **Marketplace**, accept the first-run warning and **Connect GitHub**, then **Add from link** > `https://github.com/homeassistant-ai/ha-mcp` as an **Integration** > **Install**. Or copy `custom_components/ha_mcp_tools/` from this repository into your HA `config/custom_components/` directory.
|
|
378
379
|
|
|
379
380
|
After installing, restart Home Assistant, then open **Settings** > **Devices & Services** > **Add Integration**, search for **HA-MCP Custom Component**, and add the **HA-MCP File & YAML Tools** entry.
|
|
380
381
|
|
|
@@ -34,9 +34,9 @@
|
|
|
34
34
|
|
|
35
35
|
## 🚀 Get Started
|
|
36
36
|
|
|
37
|
-
The recommended way to run ha-mcp is the **HA-MCP Custom Component**. It installs into Home Assistant through HACS, runs the full server **in-process**, and works on **every** Home Assistant installation type — Home Assistant OS, Supervised, Container, and Core — with full feature parity. It is the easiest setup in every case: setup asks for an administrator access token and how clients may connect.
|
|
37
|
+
The recommended way to run ha-mcp is the **HA-MCP Custom Component**. It installs into Home Assistant through HACS (the built-in Marketplace on Home Assistant 2026.11+), runs the full server **in-process**, and works on **every** Home Assistant installation type — Home Assistant OS, Supervised, Container, and Core — with full feature parity. It is the easiest setup in every case: setup asks for an administrator access token and how clients may connect.
|
|
38
38
|
|
|
39
|
-
**Add it to Home Assistant via HACS (the preferred install):**
|
|
39
|
+
**Add it to Home Assistant via HACS or, on Home Assistant 2026.11+, the Marketplace (the preferred install):**
|
|
40
40
|
|
|
41
41
|
[](https://my.home-assistant.io/redirect/hacs_repository/?owner=homeassistant-ai&repository=ha-mcp&category=integration)
|
|
42
42
|
|
|
@@ -44,7 +44,8 @@ The recommended way to run ha-mcp is the **HA-MCP Custom Component**. It install
|
|
|
44
44
|
|
|
45
45
|
> The setup below is for version 9.0.0 (October 28, 2026) and later; earlier versions show a shorter setup form without the administrator account step.
|
|
46
46
|
|
|
47
|
-
1. Install the **HA-MCP Custom Component** from HACS — click the badge above, or in HACS open **Integrations → ⋮ → Custom repositories**, add `https://github.com/homeassistant-ai/ha-mcp` (category: **Integration**), then **Download**.
|
|
47
|
+
1. Install the **HA-MCP Custom Component**. On **Home Assistant 2026.10 or older**, from HACS — click the badge above, or in HACS open **Integrations → ⋮ → Custom repositories**, add `https://github.com/homeassistant-ai/ha-mcp` (category: **Integration**), then **Download**.
|
|
48
|
+
On **Home Assistant 2026.11 or newer**, HACS is built in as the **Marketplace**: open **Settings → Marketplace** and accept its first-run warning, then **Connect GitHub** (a device sign-in). Adding a custom repository needs it, and until HA-MCP is in the Marketplace catalog it is also what makes the Marketplace check HA-MCP for updates in the background; without it, **Refresh information** on HA-MCP's Marketplace page checks by hand. Then click the badge above, or open the **Add from link** tab and add `https://github.com/homeassistant-ai/ha-mcp` as an **Integration**, and **Install**.
|
|
48
49
|
Already installed from the earlier `homeassistant-ai/ha-mcp-integration` repository? It keeps receiving the same releases; nothing to change.
|
|
49
50
|
2. **Restart Home Assistant.**
|
|
50
51
|
3. Decide which administrator account the server acts as. Either create a long-lived access token on your own account (your profile → **Security** → **Long-lived access tokens** → **Create token**; it works from anywhere if it leaks, and the server's changes show under your name), or, safer, create an account just for HA-MCP under **Settings → People → Add person** with **Allow login**, **Local access only** and **Administrator** on. Never use your own login for the second option.
|
|
@@ -58,7 +59,7 @@ The recommended way to run ha-mcp is the **HA-MCP Custom Component**. It install
|
|
|
58
59
|
- **Local only?** Leave remote access disabled at setup (or turn off **Remote access via webhook** in the entry options) — no webhook is registered at all, while the direct port and sidebar panel keep working.
|
|
59
60
|
- **Settings panel:** while the server runs, an admin-only **HA-MCP** panel appears in the Home Assistant sidebar for managing tools, feature flags, backups, and themes.
|
|
60
61
|
- **Optional authentication:** set **Authentication mode** to `ha_auth` to require a Home Assistant account sign-in instead of using the secret URL as the credential.
|
|
61
|
-
- **Manual install (no HACS):** copy `custom_components/ha_mcp_tools/` from this repository into your Home Assistant `config/custom_components/` directory, then restart and add the integration as above.
|
|
62
|
+
- **Manual install (no HACS or Marketplace):** copy `custom_components/ha_mcp_tools/` from this repository into your Home Assistant `config/custom_components/` directory, then restart and add the integration as above.
|
|
62
63
|
|
|
63
64
|
The component's second entry type, the **File & YAML services entry** (**HA-MCP File & YAML Tools**), is only needed if you enable ha-mcp's opt-in file and YAML editing tools (feature flags, off by default) — skip it otherwise; you can add it later at any time. It works with any server type (in-process, app, Docker, or stdio).
|
|
64
65
|
|
|
@@ -314,7 +315,7 @@ Install the **HA-MCP File & YAML Tools** entry from the same **HA-MCP Custom Com
|
|
|
314
315
|
|
|
315
316
|
[](https://my.home-assistant.io/redirect/hacs_repository/?owner=homeassistant-ai&repository=ha-mcp&category=integration)
|
|
316
317
|
|
|
317
|
-
To add manually: open **HACS** > **Integrations** > three-dot menu > **Custom repositories** > add `https://github.com/homeassistant-ai/ha-mcp` (category: Integration) > **Download**. Or copy `custom_components/ha_mcp_tools/` from this repository into your HA `config/custom_components/` directory.
|
|
318
|
+
To add manually on Home Assistant 2026.10 or older: open **HACS** > **Integrations** > three-dot menu > **Custom repositories** > add `https://github.com/homeassistant-ai/ha-mcp` (category: Integration) > **Download**. On 2026.11 or newer: in **Marketplace**, accept the first-run warning and **Connect GitHub**, then **Add from link** > `https://github.com/homeassistant-ai/ha-mcp` as an **Integration** > **Install**. Or copy `custom_components/ha_mcp_tools/` from this repository into your HA `config/custom_components/` directory.
|
|
318
319
|
|
|
319
320
|
After installing, restart Home Assistant, then open **Settings** > **Devices & Services** > **Add Integration**, search for **HA-MCP Custom Component**, and add the **HA-MCP File & YAML Tools** entry.
|
|
320
321
|
|
|
@@ -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.dev3249"
|
|
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.dev3249"
|
|
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
|
|
@@ -231,6 +231,13 @@ class Settings(BaseSettings):
|
|
|
231
231
|
bool, Setting(surface="advanced", section="operations")
|
|
232
232
|
] = Field(False, alias="HAMCP_ENABLE_HISTORY_QUERY_GUARDRAILS")
|
|
233
233
|
|
|
234
|
+
# Opt-in: ask HACS / the Marketplace to refresh the component's repository
|
|
235
|
+
# at startup after a server update (hacs_auto_refresh). An install that ran
|
|
236
|
+
# the refresh before it became opt-in has it turned on once, on its behalf.
|
|
237
|
+
hacs_refresh_after_update: Annotated[
|
|
238
|
+
bool, Setting(surface="advanced", section="operations")
|
|
239
|
+
] = Field(False, alias="HAMCP_HACS_REFRESH_AFTER_UPDATE")
|
|
240
|
+
|
|
234
241
|
# Optional process-wide outer tool-call concurrency. Zero preserves the
|
|
235
242
|
# existing unlimited behavior; constrained installs can opt into queuing.
|
|
236
243
|
ha_tool_concurrency: Annotated[
|
|
@@ -249,7 +249,10 @@ DEFAULT_SUGGESTIONS: dict[ErrorCode, list[str]] = {
|
|
|
249
249
|
"Report this issue if it persists",
|
|
250
250
|
],
|
|
251
251
|
ErrorCode.COMPONENT_NOT_INSTALLED: [
|
|
252
|
-
|
|
252
|
+
(
|
|
253
|
+
"Install the required custom component via HACS (the Marketplace on "
|
|
254
|
+
"Home Assistant 2026.11+)"
|
|
255
|
+
),
|
|
253
256
|
"Restart Home Assistant after installation",
|
|
254
257
|
],
|
|
255
258
|
}
|
|
@@ -1,16 +1,23 @@
|
|
|
1
|
-
"""Ask HACS to surface the paired component update after a server update.
|
|
1
|
+
"""Ask HACS to surface the paired component update after a server update (opt-in).
|
|
2
2
|
|
|
3
3
|
HACS refreshes a *custom* repository's release data from GitHub only about
|
|
4
|
-
every 48 hours, and the
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
every 48 hours, and the Marketplace that replaces it in Home Assistant 2026.11
|
|
5
|
+
only when a GitHub account is connected. The ha_mcp_tools component ships in
|
|
6
|
+
lockstep with each server release, so a component update can go unnoticed for
|
|
7
|
+
days, or for good. This module closes that gap for every install, the embedded
|
|
8
|
+
server included. It goes away once ha-mcp is in the default catalog, which the
|
|
9
|
+
Marketplace refreshes every 6 hours.
|
|
9
10
|
|
|
10
11
|
On startup, when the server version changed since the last recorded nudge (the
|
|
11
|
-
just-updated case) or a newer release is pending, it sends
|
|
12
|
-
information" refresh (``
|
|
13
|
-
|
|
12
|
+
just-updated case) or a newer release is pending, it sends the store's "Update
|
|
13
|
+
information" refresh (``marketplace/repository/refresh``, or
|
|
14
|
+
``hacs/repository/refresh`` before 2026.11) over the existing admin WebSocket
|
|
15
|
+
for every INSTALLED candidate repository entry. Nothing is installed: the user
|
|
16
|
+
still updates from the update entity.
|
|
17
|
+
|
|
18
|
+
It is opt-in (``hacs_refresh_after_update``). An install whose nudge completed
|
|
19
|
+
a pass before it became opt-in has a marker file and no explicit choice; the
|
|
20
|
+
setting is turned on for it once, so its behavior does not change.
|
|
14
21
|
|
|
15
22
|
Fully advisory: every failure degrades to a debug log and nothing here can
|
|
16
23
|
fault startup. A marker file in the data dir records the state the last
|
|
@@ -24,19 +31,21 @@ import asyncio
|
|
|
24
31
|
import hashlib
|
|
25
32
|
import json
|
|
26
33
|
import logging
|
|
34
|
+
import os
|
|
27
35
|
from collections.abc import AsyncIterator
|
|
28
36
|
from contextlib import asynccontextmanager, suppress
|
|
29
37
|
from pathlib import Path
|
|
30
38
|
from typing import Any
|
|
31
39
|
|
|
32
40
|
from ._vendor import websockets
|
|
33
|
-
from ._version import get_version
|
|
41
|
+
from ._version import get_version
|
|
34
42
|
from .client.rest_client import (
|
|
35
43
|
HomeAssistantCommandError,
|
|
36
44
|
HomeAssistantCommandTimeout,
|
|
37
45
|
HomeAssistantConnectionError,
|
|
38
46
|
)
|
|
39
47
|
from .config import OAUTH_MODE_TOKEN, get_global_settings
|
|
48
|
+
from .config_overrides import _read_feature_flag_override_file
|
|
40
49
|
from .update_check import UpdateInfo, get_update_info, is_update_check_disabled
|
|
41
50
|
from .utils.data_paths import get_data_dir
|
|
42
51
|
|
|
@@ -123,18 +132,23 @@ async def _refresh_installed_candidates() -> dict[str, Any] | None:
|
|
|
123
132
|
or None when the outcome could not be determined.
|
|
124
133
|
"""
|
|
125
134
|
from .client.websocket_client import get_websocket_client
|
|
135
|
+
from .tools.hacs_backend import STORE_APIS
|
|
126
136
|
from .tools.hacs_registration import send_hacs_repository_refresh
|
|
127
137
|
|
|
128
138
|
ws_client = await get_websocket_client()
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
139
|
+
for api in STORE_APIS:
|
|
140
|
+
try:
|
|
141
|
+
response = await ws_client.send_command(api.command("list"))
|
|
142
|
+
except HomeAssistantCommandError as err:
|
|
143
|
+
# A store that is not installed answers as an unknown command; any
|
|
144
|
+
# other failure (the Marketplace still loading included) is real:
|
|
145
|
+
# let the retry loop see it.
|
|
146
|
+
if err.code == "unknown_command" or "unknown command" in str(err).lower():
|
|
147
|
+
continue
|
|
148
|
+
raise
|
|
149
|
+
break
|
|
150
|
+
else:
|
|
151
|
+
return {"hacs": "absent", "refreshed": []}
|
|
138
152
|
|
|
139
153
|
wanted = {name.lower() for name in CANDIDATE_REPO_FULL_NAMES}
|
|
140
154
|
refreshed: list[str] = []
|
|
@@ -148,7 +162,7 @@ async def _refresh_installed_candidates() -> dict[str, Any] | None:
|
|
|
148
162
|
continue
|
|
149
163
|
attempted += 1
|
|
150
164
|
try:
|
|
151
|
-
await send_hacs_repository_refresh(ws_client, str(repo["id"]))
|
|
165
|
+
await send_hacs_repository_refresh(ws_client, str(repo["id"]), api)
|
|
152
166
|
except Exception as err: # noqa: BLE001
|
|
153
167
|
# Both entries read installed only when someone downloaded the
|
|
154
168
|
# mirror without removing the legacy record — HACS guards against
|
|
@@ -199,12 +213,34 @@ async def _refresh_with_retries() -> dict[str, Any] | None:
|
|
|
199
213
|
return absent_result
|
|
200
214
|
|
|
201
215
|
|
|
216
|
+
SETTING = "hacs_refresh_after_update"
|
|
217
|
+
SETTING_ENV = "HAMCP_HACS_REFRESH_AFTER_UPDATE"
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
async def _opted_in(settings: Any, marker: dict[str, Any] | None) -> bool:
|
|
221
|
+
"""Whether the nudge is on; an install that already ran it keeps it."""
|
|
222
|
+
if getattr(settings, SETTING):
|
|
223
|
+
return True
|
|
224
|
+
explicit = os.environ.get(SETTING_ENV) is not None or SETTING in (
|
|
225
|
+
await asyncio.to_thread(_read_feature_flag_override_file)
|
|
226
|
+
)
|
|
227
|
+
if explicit or marker is None:
|
|
228
|
+
return False
|
|
229
|
+
from .settings_ui._handlers_advanced import _write_advanced_overrides_file
|
|
230
|
+
|
|
231
|
+
if await _write_advanced_overrides_file({SETTING: True}) is not None:
|
|
232
|
+
logger.warning("Could not save %s=true; it stays on for this run", SETTING)
|
|
233
|
+
setattr(settings, SETTING, True)
|
|
234
|
+
logger.info(
|
|
235
|
+
"HACS auto-refresh is opt-in now; it stays on for this install, which "
|
|
236
|
+
"already used it (turn it off under Advanced settings)"
|
|
237
|
+
)
|
|
238
|
+
return True
|
|
239
|
+
|
|
240
|
+
|
|
202
241
|
async def maybe_refresh_hacs_after_update() -> None:
|
|
203
242
|
"""Nudge HACS once per startup when the update picture changed."""
|
|
204
243
|
try:
|
|
205
|
-
if is_embedded():
|
|
206
|
-
# The component manages the embedded server's updates.
|
|
207
|
-
return
|
|
208
244
|
if is_update_check_disabled():
|
|
209
245
|
return
|
|
210
246
|
|
|
@@ -215,11 +251,16 @@ async def maybe_refresh_hacs_after_update() -> None:
|
|
|
215
251
|
return
|
|
216
252
|
ha_url = settings.homeassistant_url
|
|
217
253
|
|
|
254
|
+
marker = await asyncio.to_thread(_read_marker, ha_url)
|
|
255
|
+
if not await _opted_in(settings, marker):
|
|
256
|
+
# Per-boot DEBUG line: the add-on lane proves scheduling with it.
|
|
257
|
+
logger.debug("HACS auto-refresh: off (%s is opt-in)", SETTING_ENV)
|
|
258
|
+
return
|
|
259
|
+
|
|
218
260
|
current = get_version()
|
|
219
261
|
# Normally a cache hit — the startup banner warms the lru_cache — but
|
|
220
262
|
# offloaded anyway so a cold call can never touch the event loop.
|
|
221
263
|
info = await asyncio.to_thread(get_update_info)
|
|
222
|
-
marker = await asyncio.to_thread(_read_marker, ha_url)
|
|
223
264
|
if not _nudge_due(current, info, marker):
|
|
224
265
|
# DEBUG, not INFO: the not-due return is the per-conversation
|
|
225
266
|
# stdio hot path and must stay quiet at default levels. The line
|
|
@@ -61,7 +61,8 @@ async def _component_command(
|
|
|
61
61
|
if not component_supports(caps, CAPABILITY):
|
|
62
62
|
raise _Unavailable(
|
|
63
63
|
"This HA-MCP component cannot edit the callback list. Update the "
|
|
64
|
-
"HA-MCP integration in HACS
|
|
64
|
+
"HA-MCP integration in HACS (the Marketplace on Home Assistant "
|
|
65
|
+
"2026.11+)."
|
|
65
66
|
)
|
|
66
67
|
ws = await get_websocket_client(
|
|
67
68
|
url=client.base_url,
|
{ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/locales/en.json
RENAMED
|
@@ -472,6 +472,8 @@
|
|
|
472
472
|
"advanced.individual_fetch_batch_size.help": "Concurrent per-ID config fetches. Lower toward 1 on serial HA servers.",
|
|
473
473
|
"advanced.enable_history_query_guardrails.label": "History query guardrails",
|
|
474
474
|
"advanced.enable_history_query_guardrails.help": "Reject recorder queries that exceed conservative entity and time-range budgets. Disabled by default.",
|
|
475
|
+
"advanced.hacs_refresh_after_update.label": "Refresh the component in HACS after an update",
|
|
476
|
+
"advanced.hacs_refresh_after_update.help": "At startup after a server update, ask HACS (the Marketplace on Home Assistant 2026.11+) to re-check the HA-MCP Custom Component repository, so its matching update shows right away instead of at the next 48-hour check. Off by default; installs that already did this keep it on.",
|
|
475
477
|
"advanced.ha_tool_concurrency.label": "Home Assistant tool concurrency",
|
|
476
478
|
"advanced.ha_tool_concurrency.help": "Optional limit on outer Home Assistant tool calls across all sessions. Internal REST, WebSocket, and per-tool fan-out concurrency is unchanged. 0 keeps unlimited behavior. A call waiting for capacity fails after 60 seconds.",
|
|
477
479
|
"advanced.dashboard_screenshot_engine_url.label": "Dashboard screenshot engine URL",
|
{ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_helpers/listing.py
RENAMED
|
@@ -66,6 +66,14 @@ def listed_items(listed: Any) -> list[Any]:
|
|
|
66
66
|
return listed if isinstance(listed, list) else []
|
|
67
67
|
|
|
68
68
|
|
|
69
|
+
def _outside_storage(rec: dict[str, Any]) -> bool:
|
|
70
|
+
"""A component record of a helper ``<type>/list`` does not list (a YAML
|
|
71
|
+
helper, the home zone): the component sends it with a null storage id."""
|
|
72
|
+
return rec.get("kind") == "collection" and (
|
|
73
|
+
"storage_id" in rec and rec["storage_id"] is None
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
|
|
69
77
|
def _shape_collection_helper_record(rec: dict[str, Any]) -> dict[str, Any]:
|
|
70
78
|
"""Map one component collection-helper record onto the legacy list record.
|
|
71
79
|
|
|
@@ -205,7 +213,7 @@ def _shape_component_helpers_response(
|
|
|
205
213
|
for rec in records:
|
|
206
214
|
if not isinstance(rec, dict):
|
|
207
215
|
continue
|
|
208
|
-
if (rec.get("kind") == "flow") != want_flow:
|
|
216
|
+
if (rec.get("kind") == "flow") != want_flow or _outside_storage(rec):
|
|
209
217
|
continue
|
|
210
218
|
helpers.append(
|
|
211
219
|
_shape_flow_helper_record(rec)
|
|
@@ -228,8 +236,8 @@ def _component_covers(result: dict[str, Any], helper_type: str) -> bool:
|
|
|
228
236
|
"""Whether a helpers_list response authoritatively enumerated ``helper_type``.
|
|
229
237
|
|
|
230
238
|
The component reports ``covered_types``: the helper types its response could
|
|
231
|
-
actually see. A type outside that list (e.g. ``
|
|
232
|
-
|
|
239
|
+
actually see. A type outside that list (e.g. ``person`` or ``tag``, whose
|
|
240
|
+
``<type>/list`` adds more than the stored items) must NOT
|
|
233
241
|
be trusted as "none exist". A response with no ``covered_types`` at all (an
|
|
234
242
|
older component) is treated conservatively as covering nothing, so the
|
|
235
243
|
caller falls back rather than trusting a possibly-partial list.
|
|
@@ -290,8 +298,8 @@ async def shape_all_helpers_response(
|
|
|
290
298
|
collection → ``_shape_collection_helper_record``) and stamped with its
|
|
291
299
|
own ``helper_type`` so records of different types stay distinguishable in
|
|
292
300
|
the flat list. Respecting ``covered_types`` (mirroring the single-type
|
|
293
|
-
path): a simple type the component
|
|
294
|
-
|
|
301
|
+
path): a simple type the component did not cover — ``person`` and ``tag``
|
|
302
|
+
— is fetched per-type via its
|
|
295
303
|
legacy ``{type}/list`` (``legacy_list``) and merged, so ``all`` never silently drops it.
|
|
296
304
|
|
|
297
305
|
``flow_types`` is Core's current set of helper flow types; one the component
|
|
@@ -301,7 +309,7 @@ async def shape_all_helpers_response(
|
|
|
301
309
|
records = raw if isinstance(raw, list) else []
|
|
302
310
|
helpers: list[dict[str, Any]] = []
|
|
303
311
|
for rec in records:
|
|
304
|
-
if not isinstance(rec, dict):
|
|
312
|
+
if not isinstance(rec, dict) or _outside_storage(rec):
|
|
305
313
|
continue
|
|
306
314
|
if rec.get("kind") == "flow":
|
|
307
315
|
helpers.append(_shape_flow_helper_record(rec))
|
{ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/dashboard_card_describe.py
RENAMED
|
@@ -120,7 +120,10 @@ async def describe_card_response(client: Any, card_type: str | None) -> dict[str
|
|
|
120
120
|
"Describing card types needs the ha_mcp_tools custom component "
|
|
121
121
|
"with dashboard card support.",
|
|
122
122
|
suggestions=[
|
|
123
|
-
|
|
123
|
+
(
|
|
124
|
+
"Install or update the HA-MCP Custom Component through "
|
|
125
|
+
"HACS (the Marketplace on Home Assistant 2026.11+)"
|
|
126
|
+
),
|
|
124
127
|
"Restart Home Assistant after the update completes",
|
|
125
128
|
],
|
|
126
129
|
context={"action": "describe", "card_type": card_type},
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"""Bulk ``homeassistant/expose_entity`` calls for ``ha_set_entity``."""
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
from collections.abc import Callable
|
|
5
|
+
from typing import Any
|
|
6
|
+
|
|
7
|
+
logger = logging.getLogger(__name__)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def changed_entity_ids(reply: dict[str, Any]) -> set[str] | None:
|
|
11
|
+
"""The entities Core reports it changed, or None before Core 2026.11."""
|
|
12
|
+
result = reply.get("result")
|
|
13
|
+
if isinstance(result, dict) and isinstance(result.get("changed_entity_ids"), list):
|
|
14
|
+
return set(result["changed_entity_ids"])
|
|
15
|
+
return None
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
async def apply_bulk_expose(
|
|
19
|
+
client: Any,
|
|
20
|
+
entity_ids: list[str],
|
|
21
|
+
parsed_expose_to: dict[str, bool],
|
|
22
|
+
extract_error: Callable[[dict[str, Any]], str],
|
|
23
|
+
) -> tuple[str | None, set[str] | None]:
|
|
24
|
+
"""Expose/hide many entities in one homeassistant/expose_entity call per set.
|
|
25
|
+
|
|
26
|
+
The command's schema accepts the full entity_ids list, so bulk exposure
|
|
27
|
+
needs at most two WS calls (one for the assistants being turned on, one
|
|
28
|
+
for those being turned off) regardless of entity count — not one per
|
|
29
|
+
entity. Returns (error, changed): error is None on success, or the message
|
|
30
|
+
of the first failing set, which applies to every id in the list. changed
|
|
31
|
+
holds the ids Core reports it changed, or None when Core does not report
|
|
32
|
+
them (before 2026.11).
|
|
33
|
+
"""
|
|
34
|
+
expose_true = [a for a, v in parsed_expose_to.items() if v]
|
|
35
|
+
expose_false = [a for a, v in parsed_expose_to.items() if not v]
|
|
36
|
+
applied: list[str] = []
|
|
37
|
+
changed: set[str] | None = set()
|
|
38
|
+
for assistants, should_expose in [(expose_true, True), (expose_false, False)]:
|
|
39
|
+
if not assistants:
|
|
40
|
+
continue
|
|
41
|
+
logger.info(
|
|
42
|
+
f"{'Exposing' if should_expose else 'Hiding'} {len(entity_ids)} "
|
|
43
|
+
f"entities {'to' if should_expose else 'from'} {assistants}"
|
|
44
|
+
)
|
|
45
|
+
result = await client.send_websocket_message(
|
|
46
|
+
{
|
|
47
|
+
"type": "homeassistant/expose_entity",
|
|
48
|
+
"assistants": assistants,
|
|
49
|
+
"entity_ids": entity_ids,
|
|
50
|
+
"should_expose": should_expose,
|
|
51
|
+
}
|
|
52
|
+
)
|
|
53
|
+
if not result.get("success"):
|
|
54
|
+
error = extract_error(result)
|
|
55
|
+
if applied:
|
|
56
|
+
# The earlier assistant group already changed — say so, or
|
|
57
|
+
# the all-failed report implies no exposure was touched.
|
|
58
|
+
error = (
|
|
59
|
+
f"{error} (note: expose changes for "
|
|
60
|
+
f"{', '.join(applied)} were already applied before "
|
|
61
|
+
"this failure)"
|
|
62
|
+
)
|
|
63
|
+
return error, None
|
|
64
|
+
applied.extend(assistants)
|
|
65
|
+
reported = changed_entity_ids(result)
|
|
66
|
+
changed = None if reported is None or changed is None else changed | reported
|
|
67
|
+
return None, changed
|
|
@@ -16,7 +16,9 @@ the client or tool plumbing.
|
|
|
16
16
|
"""
|
|
17
17
|
|
|
18
18
|
import re
|
|
19
|
+
from collections.abc import Callable
|
|
19
20
|
from dataclasses import dataclass
|
|
21
|
+
from datetime import UTC, datetime, timezone
|
|
20
22
|
from typing import Any, Literal, NamedTuple
|
|
21
23
|
|
|
22
24
|
from ..client.error_log_journald import cursor_token
|
|
@@ -33,9 +35,9 @@ from .log_common import (
|
|
|
33
35
|
# The thread field is matched lazily instead of as `\([^)]*\)`: since Python 3.10
|
|
34
36
|
# an unnamed thread is called "Thread-1 (target_fn)", so the field itself can
|
|
35
37
|
# contain parentheses, and a class that cannot cross them drops every line those
|
|
36
|
-
# threads log.
|
|
38
|
+
# threads log. Core 2026.11+ appends the local UTC offset ("…10:15:23.456-04:00").
|
|
37
39
|
_HA_LOG_LINE_RE = re.compile(
|
|
38
|
-
r"^(\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}:\d{2}(?:\.\d+)?)"
|
|
40
|
+
r"^(\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:?\d{2})?)"
|
|
39
41
|
r"\s+(DEBUG|INFO|WARNING|ERROR|CRITICAL)"
|
|
40
42
|
r"\s+\(.*?\)"
|
|
41
43
|
r"\s+\[([^\]]+)\]"
|
|
@@ -83,13 +85,11 @@ def _strip_ansi(text: str) -> str:
|
|
|
83
85
|
def _normalize_timestamp(timestamp: str) -> str:
|
|
84
86
|
"""Put a matched timestamp on one date/time separator.
|
|
85
87
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
at once. HA core emits the space form, so normalize onto that: real logs
|
|
92
|
-
come out byte-identical and only the ISO-8601 variant is rewritten.
|
|
88
|
+
``_HA_LOG_LINE_RE`` accepts both the space and the ``T`` form
|
|
89
|
+
(case-insensitively); one form keeps a recurring issue's reported
|
|
90
|
+
timestamps uniform. HA core emits the space form, so normalize onto that:
|
|
91
|
+
real logs come out byte-identical and only the ISO-8601 variant is
|
|
92
|
+
rewritten. Comparisons go through ``_instant_order``.
|
|
93
93
|
|
|
94
94
|
The date is fixed-width in the pattern (``\\d{4}-\\d{2}-\\d{2}``), so the
|
|
95
95
|
separator is always at index 10 — replacing by position also covers the
|
|
@@ -98,6 +98,30 @@ def _normalize_timestamp(timestamp: str) -> str:
|
|
|
98
98
|
return timestamp[:10] + " " + timestamp[11:]
|
|
99
99
|
|
|
100
100
|
|
|
101
|
+
def _instant_order(stamps: list[str]) -> Callable[[str], datetime]:
|
|
102
|
+
"""Order timestamps by instant, not text.
|
|
103
|
+
|
|
104
|
+
Core 2026.11+ stamps carry the UTC offset, so the repeated hour when
|
|
105
|
+
daylight saving ends sorts wrong as text. Offset-less stamps (older Core,
|
|
106
|
+
or the lines before an upgrade) take the window's first offset: the zone
|
|
107
|
+
outlives a restart.
|
|
108
|
+
"""
|
|
109
|
+
offset = next(
|
|
110
|
+
(o for s in stamps if (o := datetime.fromisoformat(s).utcoffset()) is not None),
|
|
111
|
+
None,
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
def key(stamp: str) -> datetime:
|
|
115
|
+
parsed = datetime.fromisoformat(stamp)
|
|
116
|
+
if parsed.tzinfo is None:
|
|
117
|
+
if offset is None:
|
|
118
|
+
return parsed
|
|
119
|
+
parsed = parsed.replace(tzinfo=timezone(offset))
|
|
120
|
+
return parsed.astimezone(UTC).replace(tzinfo=None)
|
|
121
|
+
|
|
122
|
+
return key
|
|
123
|
+
|
|
124
|
+
|
|
101
125
|
def _get_component_prefix(logger_name: str) -> str:
|
|
102
126
|
"""Extract the component prefix (first N dotted segments) of a logger name.
|
|
103
127
|
|
|
@@ -141,6 +165,7 @@ class _ExtractedLines(NamedTuple):
|
|
|
141
165
|
blank: int
|
|
142
166
|
window_start: str | None
|
|
143
167
|
window_end: str | None
|
|
168
|
+
order: Callable[[str], datetime]
|
|
144
169
|
|
|
145
170
|
|
|
146
171
|
def _extract_log_entries(
|
|
@@ -159,8 +184,7 @@ def _extract_log_entries(
|
|
|
159
184
|
matched = 0
|
|
160
185
|
unparseable = 0
|
|
161
186
|
blank = 0
|
|
162
|
-
|
|
163
|
-
window_end: str | None = None
|
|
187
|
+
stamps: list[str] = []
|
|
164
188
|
needle = search.lower() if search else None
|
|
165
189
|
|
|
166
190
|
for line in lines:
|
|
@@ -180,12 +204,9 @@ def _extract_log_entries(
|
|
|
180
204
|
matched += 1
|
|
181
205
|
timestamp, log_level, logger_name, message = match.groups()
|
|
182
206
|
timestamp = _normalize_timestamp(timestamp)
|
|
183
|
-
#
|
|
207
|
+
# The covered window spans every parseable line, filtered or not:
|
|
184
208
|
# it describes the log slice that was read, not the summary's contents.
|
|
185
|
-
|
|
186
|
-
window_start = timestamp
|
|
187
|
-
if window_end is None or timestamp > window_end:
|
|
188
|
-
window_end = timestamp
|
|
209
|
+
stamps.append(timestamp)
|
|
189
210
|
log_level = log_level.upper()
|
|
190
211
|
if level and log_level != level:
|
|
191
212
|
continue
|
|
@@ -207,13 +228,15 @@ def _extract_log_entries(
|
|
|
207
228
|
}
|
|
208
229
|
)
|
|
209
230
|
|
|
231
|
+
order = _instant_order(stamps)
|
|
210
232
|
return _ExtractedLines(
|
|
211
233
|
entries=entries,
|
|
212
234
|
matched=matched,
|
|
213
235
|
unparseable=unparseable,
|
|
214
236
|
blank=blank,
|
|
215
|
-
window_start=
|
|
216
|
-
window_end=
|
|
237
|
+
window_start=min(stamps, key=order, default=None),
|
|
238
|
+
window_end=max(stamps, key=order, default=None),
|
|
239
|
+
order=order,
|
|
217
240
|
)
|
|
218
241
|
|
|
219
242
|
|
|
@@ -440,8 +463,12 @@ def _parse_error_log_structured(
|
|
|
440
463
|
# Bounds, not last-write-wins: a log whose lines are not perfectly
|
|
441
464
|
# ordered would otherwise drag last_seen backwards, which also
|
|
442
465
|
# misplaces the issue in the recency tiebreaker below.
|
|
443
|
-
record["first_seen"] = min(
|
|
444
|
-
|
|
466
|
+
record["first_seen"] = min(
|
|
467
|
+
record["first_seen"], entry["timestamp"], key=extracted.order
|
|
468
|
+
)
|
|
469
|
+
record["last_seen"] = max(
|
|
470
|
+
record["last_seen"], entry["timestamp"], key=extracted.order
|
|
471
|
+
)
|
|
445
472
|
|
|
446
473
|
# Count first, then severity, then recency. Python's sort is stable, so
|
|
447
474
|
# count alone would return the *oldest* of a tied run — and on a log whose
|
|
@@ -452,7 +479,7 @@ def _parse_error_log_structured(
|
|
|
452
479
|
key=lambda i: (
|
|
453
480
|
i["count"],
|
|
454
481
|
_LEVEL_SEVERITY.get(i["level"], 0),
|
|
455
|
-
i["last_seen"],
|
|
482
|
+
extracted.order(i["last_seen"]),
|
|
456
483
|
),
|
|
457
484
|
reverse=True,
|
|
458
485
|
)
|