ha-mcp-dev 9.1.0.dev3241__tar.gz → 9.1.0.dev3245__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.dev3241 → ha_mcp_dev-9.1.0.dev3245}/PKG-INFO +7 -6
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/README.md +6 -5
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/pyproject.toml +1 -1
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/pyproject.toml.orig +1 -1
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/config_settings.py +7 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/errors.py +4 -1
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/hacs_auto_refresh.py +65 -24
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/settings_ui/_handlers_oauth_callbacks.py +2 -1
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/settings_ui/locales/en.json +2 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/dashboard_card_describe.py +4 -1
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/device_control.py +29 -35
- ha_mcp_dev-9.1.0.dev3245/src/ha_mcp/tools/entity_expose_batch.py +67 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/error_log_parsing.py +48 -21
- ha_mcp_dev-9.1.0.dev3245/src/ha_mcp/tools/hacs_backend.py +243 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/hacs_registration.py +39 -65
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/log_sources_fault.py +1 -1
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/tools_bug_report.py +1 -1
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/tools_entities.py +30 -58
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/tools_filesystem.py +4 -4
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/tools_hacs.py +180 -177
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/tools_resources.py +5 -5
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/tools_themes.py +1 -1
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/tools_updates.py +10 -42
- ha_mcp_dev-9.1.0.dev3245/src/ha_mcp/tools/update_categories.py +61 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/update_check.py +2 -1
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/LICENSE +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/__main__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_pypi_marker +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_rich_compat.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev_security.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/client/mixins/skills.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/jev_search.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/mixins/extensions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/skills/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/skills/_constants.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/skills/_resources.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/skills/_snapshot.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/skills/_source.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/skills/client.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/skills/extension.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/skills/models.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/shared/_request_clock.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/requirements.txt +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/client.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/server.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_vendor/websockets/version.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/_version.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/app_discovery.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/auth/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/auth/consent_form.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/auth/iss_stamp.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/auth/oidc_compat.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/auth/provider.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/backup_dashboards.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/backup_diff.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/backup_entities.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/backup_entity_ids.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/backup_helper_target.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/backup_integrations.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/backup_manager.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/backup_tags.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/backup_zones.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/browser_landing.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/client/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/client/admin_routes.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/client/error_log_journald.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/client/models.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/client/rest_client.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/client/supervisor_client.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/client/websocket_client.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/client/websocket_listener.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/config.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/config_backup.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/config_meta.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/config_overrides.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/config_registry.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/dashboard_screenshot/engine_compat.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/ha_request_queue.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/http_transport.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/image_info.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/llm_exposure.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/log_filters.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/mcp_client_context.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/policy/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/policy/approval_queue.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/policy/decision_pin.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/policy/decisions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/policy/editing.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/policy/evaluator.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/policy/events.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/policy/handlers.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/policy/middleware.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/policy/model.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/policy/mrtr.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/policy/persistence.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/policy/server_channels.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/policy/value_sources.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/py.typed +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/read_only.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/redaction.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/renamed_tools.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-actions.md +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/triggers-and-conditions.md +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/server.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/server_instructions.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/server_lifespan.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/server_tool_text.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/settings_ui/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/settings_ui/_i18n.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/settings_ui/_persistence.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/settings_ui/_theme.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/settings_ui/locales/README.md +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/settings_ui/locales/az.json +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/settings_ui/locales/de.json +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/settings_ui/locales/es.json +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/settings_ui/locales/it.json +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/settings_ui/settings.css +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/settings_ui/settings.html +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/settings_ui/settings_js/01_i18n_state.js +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/settings_ui/settings_js/02_tools_restart.js +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/settings_ui/settings_js/03_render_save.js +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/settings_ui/settings_js/04_backups.js +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/settings_ui/settings_js/05_feature_flags.js +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/settings_ui/settings_js/06_policy_cards.js +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/settings_ui/settings_js/07_policy_actions.js +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/settings_ui/settings_js/08_advanced.js +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/settings_ui/settings_js/09_prefs_visibility.js +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/settings_ui/settings_js/10_oauth_callbacks.js +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/smoke_test.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/storage_helper_types.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/strict_bps.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tool_dispatch.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/addon_connection_hints.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/area_messages.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/auto_backup.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/backup.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/backup_access.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/backup_on_demand.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/backup_snapshot.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/backup_snapshot_restore.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/best_practice_checker.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/best_practice_result.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/best_practice_variables.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/blueprint_sources.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/blueprint_write.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/bug_report_config.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/bug_report_templates.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/bulk_selector.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/coercion.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/component_api.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/component_config_entries.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/component_config_reads.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/component_devices.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/component_helper_collections.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/component_registries.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/config_entry_backup.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/config_entry_flow.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/config_entry_flow_introspect.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/config_entry_identity.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/config_file_visibility.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/config_helpers/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/config_helpers/core_payload.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/config_helpers/create.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/config_helpers/describe.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/config_helpers/flow.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/config_helpers/icon_route.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/config_helpers/listing.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/config_helpers/registry.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/config_helpers/schemas.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/config_helpers/typed_config.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/config_helpers/update.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/config_helpers/validation.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/config_subentry_restore.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/config_write_errors.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/config_write_helpers.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/core_contract.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/dashboard_list_checks.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/dashboard_read_errors.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/dev_backup.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/device_enrichment.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/diagnostics_helpers.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/energy_preferences.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/entity_param_parsing.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/entity_registration.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/entity_removal.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/entity_update_fields.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/flow_helper_lookup.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/helper_flows.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/helpers.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/history_response.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/integration_entry_state.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/log_common.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/log_sources.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/log_sources_logbook.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/radio/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/radio/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/radio/matter.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/radio/thread.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/radio/zigbee.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/radio/zwave.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/radio/zwave_parameters.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/recorder_errors.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/reference_validator.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/registry.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/response_helpers.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/scene_discovery.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/search/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/search/base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/search/component.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/search/entities.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/search/legacy.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/search/modes.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/search/overview.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/search/response.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/search/state.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/server_version.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/smart_search/_base.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/smart_search/_config.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/statistics_calendar.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/statistics_helpers.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/statistics_resets.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/system_restart.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/tool_hints.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/tools_addons.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/tools_areas.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/tools_blueprints.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/tools_calendar.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/tools_camera.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/tools_categories.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/tools_code.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/tools_config_automations.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/tools_dev.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/tools_energy.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/tools_groups.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/tools_history.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/tools_integrations.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/tools_labels.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/tools_logs.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/tools_radio.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/tools_registry.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/tools_search.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/tools_security_policy.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/tools_service.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/tools_services.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/tools_system.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/tools_todo.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/tools_traces.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/tools_utility.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/tools_zones.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/util_helpers.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/validation_middleware.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/tools/ws_waiters.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/transforms/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/transforms/categorized_search.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/transforms/compact_params.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/transforms/component_helpers.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/transforms/component_search.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/transforms/write_tool_note.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/transport_security.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/utils/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/utils/config_hash.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/utils/config_write_lock.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/utils/dashboard_patch.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/utils/data_paths.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/utils/domain_handlers.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/utils/entity_membership.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/utils/fuzzy_search.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/utils/mcp_client_host.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/utils/operation_manager.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/utils/python_sandbox.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/utils/registry_update_lock.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/utils/skill_loader.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/utils/usage_logger.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/visibility/__init__.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/visibility/config_files.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/visibility/enforcement.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/visibility/identifier_aliases.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/visibility/model.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/src/ha_mcp/visibility/persistence.py +0 -0
- {ha_mcp_dev-9.1.0.dev3241 → ha_mcp_dev-9.1.0.dev3245}/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.dev3245
|
|
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.dev3245"
|
|
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.dev3245"
|
|
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.dev3241 → ha_mcp_dev-9.1.0.dev3245}/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.dev3241 → ha_mcp_dev-9.1.0.dev3245}/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},
|
|
@@ -65,8 +65,8 @@ _BULK_ROW_SHAPE_SUGGESTION = (
|
|
|
65
65
|
# The ha_mcp_tools/bulk_call_service WS command (Phase 3, D5a): the BATCH write
|
|
66
66
|
# capability. When the component advertises ``bulk_call_service`` the consumer
|
|
67
67
|
# resolves every op's domain/service server-side (D6), sends one register-before-fire
|
|
68
|
-
# batch frame, and maps
|
|
69
|
-
# bulk response shape — no operation-id polling needed. Named once so the routing
|
|
68
|
+
# batch frame, and maps each op's inline result (confirmed or not) back into the
|
|
69
|
+
# legacy bulk response shape — no operation-id polling needed. Named once so the routing
|
|
70
70
|
# helper and its tests agree on the wire string.
|
|
71
71
|
WS_BULK_CALL_SERVICE = "ha_mcp_tools/bulk_call_service"
|
|
72
72
|
|
|
@@ -887,30 +887,24 @@ class DeviceControlTools:
|
|
|
887
887
|
)
|
|
888
888
|
|
|
889
889
|
# Route through the component's bulk_call_service capability when
|
|
890
|
-
# advertised (D5a): one register-before-fire batch frame confirms
|
|
891
|
-
#
|
|
892
|
-
# None return means nothing dispatched (capability miss /
|
|
893
|
-
# /
|
|
894
|
-
# (D9 at-most-once).
|
|
890
|
+
# advertised (D5a): one register-before-fire batch frame; HA confirms ops
|
|
891
|
+
# inline (no operation-id polling) and each op's result says whether it
|
|
892
|
+
# did. A None return means nothing dispatched (capability miss /
|
|
893
|
+
# unresolvable op / pre-send failure), so the legacy path below is a safe
|
|
894
|
+
# first fire (D9 at-most-once).
|
|
895
895
|
component_response = await self._bulk_via_component(
|
|
896
896
|
operations, valid_operations, skipped_operations, parallel
|
|
897
897
|
)
|
|
898
898
|
if component_response is not None:
|
|
899
|
-
#
|
|
900
|
-
#
|
|
901
|
-
# retried); only a fully-served batch is "confirmed inline". The legacy
|
|
902
|
-
# ``_build_bulk_response`` never sets a top-level ``partial``, so this
|
|
903
|
-
# flag reliably marks the ambiguous path.
|
|
904
|
-
component_message = (
|
|
905
|
-
"dispatched via component (unconfirmed — not retried)"
|
|
906
|
-
if component_response.get("partial")
|
|
907
|
-
else "dispatched via component (confirmed inline)"
|
|
908
|
-
)
|
|
899
|
+
# Report the dispatch only; each op's outcome is in its result and is
|
|
900
|
+
# never summarised here.
|
|
909
901
|
await safe_progress(
|
|
910
902
|
ctx,
|
|
911
903
|
progress=len(valid_operations),
|
|
912
904
|
total=len(valid_operations),
|
|
913
|
-
message=
|
|
905
|
+
message=(
|
|
906
|
+
"dispatched via component; each op's result shows its outcome"
|
|
907
|
+
),
|
|
914
908
|
)
|
|
915
909
|
return component_response
|
|
916
910
|
|
|
@@ -1012,7 +1006,7 @@ class DeviceControlTools:
|
|
|
1012
1006
|
) -> dict[str, Any]:
|
|
1013
1007
|
"""Map one component op result into the legacy per-op result shape.
|
|
1014
1008
|
|
|
1015
|
-
The component
|
|
1009
|
+
The component reports each op's confirmation inline, so the op returns a
|
|
1016
1010
|
synthesized terminal status instead of the legacy ``pending_verification`` +
|
|
1017
1011
|
operation-id handle. A ``command_sent: True`` result is counted ``successful``
|
|
1018
1012
|
by ``_build_bulk_response`` exactly as the legacy dispatch result is; an op
|
|
@@ -1137,7 +1131,7 @@ class DeviceControlTools:
|
|
|
1137
1131
|
"action": action,
|
|
1138
1132
|
"parameters": op.get("parameters") or {},
|
|
1139
1133
|
"command_sent": True,
|
|
1140
|
-
# M-status:
|
|
1134
|
+
# M-status: a component-path op has no operation_id, so a
|
|
1141
1135
|
# "pending_verification" status is misleading (nothing will poll it). Use
|
|
1142
1136
|
# "dispatched_unconfirmed" — the same label the ambiguous batch path uses.
|
|
1143
1137
|
"status": "completed" if confirmed else "dispatched_unconfirmed",
|
|
@@ -1182,7 +1176,7 @@ class DeviceControlTools:
|
|
|
1182
1176
|
|
|
1183
1177
|
Returns a legacy-shaped bulk response (built by the SAME
|
|
1184
1178
|
``_build_bulk_response`` the legacy path uses, with ``operation_ids`` empty
|
|
1185
|
-
and ``follow_up`` None since
|
|
1179
|
+
and ``follow_up`` None since confirmation is inline) when the component
|
|
1186
1180
|
advertises ``bulk_call_service`` and the frame lands, else ``None`` so the
|
|
1187
1181
|
caller runs the unchanged legacy operation-registry path.
|
|
1188
1182
|
|
|
@@ -1316,7 +1310,7 @@ class DeviceControlTools:
|
|
|
1316
1310
|
valid_operations, rows, op_results, strict=True
|
|
1317
1311
|
)
|
|
1318
1312
|
]
|
|
1319
|
-
# Reuse the legacy response builder: operation_ids is empty (
|
|
1313
|
+
# Reuse the legacy response builder: operation_ids is empty (confirmation is
|
|
1320
1314
|
# inline, no polling handle) → follow_up is None, and the successful/failed
|
|
1321
1315
|
# tallies key off command_sent exactly as the legacy path.
|
|
1322
1316
|
return self._build_bulk_response(
|
|
@@ -1386,14 +1380,14 @@ class DeviceControlTools:
|
|
|
1386
1380
|
skipped_operations: list[dict[str, Any]],
|
|
1387
1381
|
parallel: bool,
|
|
1388
1382
|
) -> dict[str, Any]:
|
|
1389
|
-
"""Partial-success bulk response for a
|
|
1390
|
-
|
|
1391
|
-
The batch frame WAS sent, so some/all ops may have dispatched
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
reach here).
|
|
1383
|
+
"""Partial-success bulk response for a sent batch frame with no usable reply.
|
|
1384
|
+
|
|
1385
|
+
The batch frame WAS sent, so some/all ops may have dispatched, but the reply
|
|
1386
|
+
timed out, the connection dropped, or the success envelope was malformed.
|
|
1387
|
+
Per D9 at-most-once every valid op is reported dispatched-but-unconfirmed
|
|
1388
|
+
(``partial``) and the batch is NEVER re-dispatched via legacy. ``rows`` is
|
|
1389
|
+
aligned 1:1 with ``valid_operations`` (both built in order; an unresolvable op
|
|
1390
|
+
returned to legacy earlier, so no ``None`` rows reach here).
|
|
1397
1391
|
"""
|
|
1398
1392
|
results: list[dict[str, Any]] = [
|
|
1399
1393
|
{
|
|
@@ -1413,8 +1407,8 @@ class DeviceControlTools:
|
|
|
1413
1407
|
},
|
|
1414
1408
|
"verification_method": "component_state_change",
|
|
1415
1409
|
"message": (
|
|
1416
|
-
f"{entity_id} {action} dispatched but
|
|
1417
|
-
"
|
|
1410
|
+
f"{entity_id} {action} dispatched but no usable batch "
|
|
1411
|
+
"confirmation arrived; not retried"
|
|
1418
1412
|
),
|
|
1419
1413
|
}
|
|
1420
1414
|
for (_idx, op, entity_id, action), row in zip(
|
|
@@ -1426,9 +1420,9 @@ class DeviceControlTools:
|
|
|
1426
1420
|
)
|
|
1427
1421
|
response["partial"] = True
|
|
1428
1422
|
response.setdefault("warnings", []).append(
|
|
1429
|
-
"The bulk operation was dispatched but
|
|
1430
|
-
"
|
|
1431
|
-
"ha_get_state to verify the affected entities."
|
|
1423
|
+
"The bulk operation was dispatched but no usable confirmation arrived "
|
|
1424
|
+
"(timeout, dropped connection or malformed reply). Operations were NOT "
|
|
1425
|
+
"retried (at-most-once). Use ha_get_state to verify the affected entities."
|
|
1432
1426
|
)
|
|
1433
1427
|
return response
|
|
1434
1428
|
|
|
@@ -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
|