ha-mcp-dev 9.0.1.dev3235__tar.gz → 9.1.0.dev3241__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.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/PKG-INFO +1 -1
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/pyproject.toml +1 -1
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/pyproject.toml.orig +1 -1
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/config_settings.py +8 -8
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/dashboard_screenshot/__init__.py +2 -3
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/dashboard_screenshot/capture.py +39 -30
- ha_mcp_dev-9.1.0.dev3241/src/ha_mcp/dashboard_screenshot/engine_compat.py +17 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/dashboard_screenshot/paths.py +2 -2
- ha_mcp_dev-9.1.0.dev3241/src/ha_mcp/dashboard_screenshot/provision.py +387 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/settings_ui/locales/en.json +1 -1
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/settings_ui/settings_js/05_feature_flags.js +1 -1
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/tools_dashboard_screenshot.py +13 -11
- ha_mcp_dev-9.0.1.dev3235/src/ha_mcp/dashboard_screenshot/provision.py +0 -306
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/LICENSE +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/README.md +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/__main__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_pypi_marker +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_rich_compat.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev_security.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/client/mixins/skills.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/jev_search.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/mixins/extensions.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/skills/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/skills/_constants.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/skills/_resources.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/skills/_snapshot.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/skills/_source.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/skills/client.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/skills/extension.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/skills/models.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/shared/_request_clock.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/requirements.txt +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/client.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/server.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_vendor/websockets/version.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/_version.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/app_discovery.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/auth/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/auth/consent_form.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/auth/iss_stamp.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/auth/oidc_compat.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/auth/provider.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/backup_dashboards.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/backup_diff.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/backup_entities.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/backup_entity_ids.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/backup_helper_target.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/backup_integrations.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/backup_manager.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/backup_tags.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/backup_zones.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/browser_landing.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/client/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/client/admin_routes.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/client/error_log_journald.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/client/models.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/client/rest_client.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/client/supervisor_client.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/client/websocket_client.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/client/websocket_listener.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/config.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/config_backup.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/config_meta.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/config_overrides.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/config_registry.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/errors.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/ha_request_queue.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/hacs_auto_refresh.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/http_transport.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/image_info.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/llm_exposure.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/log_filters.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/mcp_client_context.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/policy/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/policy/approval_queue.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/policy/decision_pin.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/policy/decisions.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/policy/editing.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/policy/evaluator.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/policy/events.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/policy/handlers.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/policy/middleware.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/policy/model.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/policy/mrtr.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/policy/persistence.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/policy/server_channels.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/policy/value_sources.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/py.typed +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/read_only.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/redaction.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/renamed_tools.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-actions.md +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/triggers-and-conditions.md +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/server.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/server_instructions.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/server_lifespan.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/server_tool_text.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/settings_ui/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/settings_ui/_handlers_oauth_callbacks.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/settings_ui/_i18n.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/settings_ui/_persistence.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/settings_ui/_theme.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/settings_ui/locales/README.md +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/settings_ui/locales/az.json +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/settings_ui/locales/de.json +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/settings_ui/locales/es.json +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/settings_ui/locales/it.json +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/settings_ui/settings.css +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/settings_ui/settings.html +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/settings_ui/settings_js/01_i18n_state.js +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/settings_ui/settings_js/02_tools_restart.js +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/settings_ui/settings_js/03_render_save.js +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/settings_ui/settings_js/04_backups.js +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/settings_ui/settings_js/06_policy_cards.js +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/settings_ui/settings_js/07_policy_actions.js +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/settings_ui/settings_js/08_advanced.js +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/settings_ui/settings_js/09_prefs_visibility.js +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/settings_ui/settings_js/10_oauth_callbacks.js +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/smoke_test.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/storage_helper_types.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/strict_bps.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tool_dispatch.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/addon_connection_hints.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/area_messages.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/auto_backup.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/backup.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/backup_access.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/backup_on_demand.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/backup_snapshot.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/backup_snapshot_restore.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/best_practice_checker.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/best_practice_result.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/best_practice_variables.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/blueprint_sources.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/blueprint_write.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/bug_report_config.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/bug_report_templates.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/bulk_selector.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/coercion.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/component_api.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/component_config_entries.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/component_config_reads.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/component_devices.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/component_helper_collections.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/component_registries.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/config_entry_backup.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/config_entry_flow.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/config_entry_flow_introspect.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/config_entry_identity.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/config_file_visibility.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/config_helpers/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/config_helpers/core_payload.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/config_helpers/create.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/config_helpers/describe.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/config_helpers/flow.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/config_helpers/icon_route.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/config_helpers/listing.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/config_helpers/registry.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/config_helpers/schemas.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/config_helpers/typed_config.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/config_helpers/update.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/config_helpers/validation.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/config_subentry_restore.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/config_write_errors.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/config_write_helpers.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/core_contract.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/dashboard_card_describe.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/dashboard_list_checks.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/dashboard_read_errors.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/dev_backup.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/device_control.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/device_enrichment.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/diagnostics_helpers.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/energy_preferences.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/entity_param_parsing.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/entity_registration.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/entity_removal.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/entity_update_fields.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/error_log_parsing.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/flow_helper_lookup.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/hacs_registration.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/helper_flows.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/helpers.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/history_response.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/integration_entry_state.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/log_common.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/log_sources.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/log_sources_fault.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/log_sources_logbook.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/radio/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/radio/base.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/radio/matter.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/radio/thread.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/radio/zigbee.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/radio/zwave.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/radio/zwave_parameters.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/recorder_errors.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/reference_validator.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/registry.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/response_helpers.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/scene_discovery.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/search/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/search/base.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/search/component.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/search/entities.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/search/legacy.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/search/modes.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/search/overview.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/search/response.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/search/state.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/server_version.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/smart_search/_base.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/smart_search/_config.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/statistics_calendar.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/statistics_helpers.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/statistics_resets.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/system_restart.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/tool_hints.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/tools_addons.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/tools_areas.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/tools_blueprints.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/tools_bug_report.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/tools_calendar.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/tools_camera.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/tools_categories.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/tools_code.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/tools_config_automations.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/tools_dev.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/tools_energy.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/tools_entities.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/tools_filesystem.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/tools_groups.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/tools_hacs.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/tools_history.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/tools_integrations.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/tools_labels.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/tools_logs.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/tools_radio.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/tools_registry.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/tools_resources.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/tools_search.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/tools_security_policy.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/tools_service.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/tools_services.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/tools_system.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/tools_themes.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/tools_todo.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/tools_traces.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/tools_updates.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/tools_utility.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/tools_zones.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/util_helpers.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/validation_middleware.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/tools/ws_waiters.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/transforms/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/transforms/categorized_search.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/transforms/compact_params.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/transforms/component_helpers.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/transforms/component_search.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/transforms/write_tool_note.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/transport_security.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/update_check.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/utils/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/utils/config_hash.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/utils/config_write_lock.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/utils/dashboard_patch.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/utils/data_paths.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/utils/domain_handlers.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/utils/entity_membership.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/utils/fuzzy_search.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/utils/mcp_client_host.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/utils/operation_manager.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/utils/python_sandbox.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/utils/registry_update_lock.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/utils/skill_loader.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/utils/usage_logger.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/visibility/__init__.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/visibility/config_files.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/visibility/enforcement.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/visibility/identifier_aliases.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/visibility/model.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/visibility/persistence.py +0 -0
- {ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/visibility/resolver.py +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "uv_build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "ha-mcp-dev"
|
|
7
|
-
version = "9.0.
|
|
7
|
+
version = "9.1.0.dev3241"
|
|
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.0.
|
|
7
|
+
version = "9.1.0.dev3241"
|
|
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
|
|
@@ -250,11 +250,11 @@ class Settings(BaseSettings):
|
|
|
250
250
|
Setting(surface="advanced", section="operations", restart_required=True),
|
|
251
251
|
] = Field(True, alias="ENABLE_WEBSOCKET")
|
|
252
252
|
|
|
253
|
-
# Base URL of the screenshot engine (e.g. ``http://puppet:10000
|
|
254
|
-
# docker-compose sidecar). A
|
|
255
|
-
# it is not a feature flag. Left
|
|
256
|
-
# provisioner auto-discovers
|
|
257
|
-
# HA OS / Supervised mode; Container / Core users set it explicitly.
|
|
253
|
+
# Base URL of the screenshot engine (e.g. ``http://puppet:10000``,
|
|
254
|
+
# ``http://wpe-screenshot-engine:8080`` or a docker-compose sidecar). A
|
|
255
|
+
# connection string, NOT a beta toggle, so it is not a feature flag. Left
|
|
256
|
+
# blank, the provisioner auto-discovers supported apps via the Supervisor
|
|
257
|
+
# in HA OS / Supervised mode; Container / Core users set it explicitly.
|
|
258
258
|
# Resolved live per capture (resolve_engine), so unlike the time
|
|
259
259
|
# budgets it takes effect without a restart (#1538).
|
|
260
260
|
dashboard_screenshot_engine_url: Annotated[
|
|
@@ -670,9 +670,9 @@ class Settings(BaseSettings):
|
|
|
670
670
|
# Dashboard screenshot mode — the ``ha_get_dashboard_screenshot`` tool
|
|
671
671
|
# plus the ``include_screenshot`` / ``return_screenshot`` params on the
|
|
672
672
|
# dashboard get/set tools. Renders responsive Lovelace images via a
|
|
673
|
-
# separate, opt-in
|
|
674
|
-
#
|
|
675
|
-
#
|
|
673
|
+
# separate, opt-in screenshot engine app (Puppet, WPE Screenshot Engine,
|
|
674
|
+
# or a docker-compose sidecar). Off by default; nothing heavy is pulled
|
|
675
|
+
# unless the user enables it AND installs the engine.
|
|
676
676
|
enable_dashboard_screenshot: Annotated[
|
|
677
677
|
bool, Setting(surface="feature", beta=True, app=_DEV_FLAVOR)
|
|
678
678
|
] = Field(False, alias="HAMCP_ENABLE_DASHBOARD_SCREENSHOT")
|
{ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/dashboard_screenshot/__init__.py
RENAMED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
"""Dashboard screenshot support (opt-in, beta).
|
|
2
2
|
|
|
3
|
-
Renders Home Assistant Lovelace dashboard views via a separate
|
|
4
|
-
|
|
5
|
-
or a docker-compose sidecar).
|
|
3
|
+
Renders Home Assistant Lovelace dashboard views via a separate screenshot
|
|
4
|
+
engine (balloob's Puppet app, WPE Screenshot Engine, or a sidecar).
|
|
6
5
|
|
|
7
6
|
The heavy browser runtime lives entirely in that separate engine — this
|
|
8
7
|
package is a thin async HTTP client plus deployment-mode discovery, so the
|
{ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/dashboard_screenshot/capture.py
RENAMED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"""Thin async HTTP client to the dashboard screenshot engine.
|
|
2
2
|
|
|
3
|
-
The engine (
|
|
4
|
-
authenticates to Home Assistant with its
|
|
5
|
-
this client passes only the dashboard path
|
|
3
|
+
The engine (Puppet, WPE Screenshot Engine, or a sidecar)
|
|
4
|
+
authenticates to Home Assistant with its own configured long-lived token, so
|
|
5
|
+
this client passes only the dashboard path and render parameters to the engine
|
|
6
6
|
— no HA token is ever sent to the engine or exposed to the LLM. The
|
|
7
7
|
:mod:`theme_guard` bracket around each capture batch may hold the engine's
|
|
8
8
|
token in server memory to restore the engine user's saved theme (issue
|
|
@@ -24,7 +24,8 @@ from ha_mcp._vendor.fastmcp.exceptions import ToolError
|
|
|
24
24
|
|
|
25
25
|
from ..errors import ErrorCode, create_error_response
|
|
26
26
|
from ..tools.helpers import raise_tool_error
|
|
27
|
-
from .
|
|
27
|
+
from .engine_compat import is_legacy_puppet
|
|
28
|
+
from .provision import TOKEN_HINT, EngineKind, resolve_engine
|
|
28
29
|
from .theme_guard import ThemeGuard
|
|
29
30
|
|
|
30
31
|
logger = logging.getLogger(__name__)
|
|
@@ -97,9 +98,9 @@ _FORBIDDEN_PATH_BITS = ("://", "//", "..", "@", "\\", "?", "#")
|
|
|
97
98
|
class DashboardImageCapture:
|
|
98
99
|
"""Image bytes plus metadata describing the render request.
|
|
99
100
|
|
|
100
|
-
|
|
101
|
-
context values here therefore describe what ha-mcp requested, not
|
|
102
|
-
independently confirmed by the rendered Home Assistant frontend.
|
|
101
|
+
Screenshot engines return only an image and its content type. Viewport and
|
|
102
|
+
frontend context values here therefore describe what ha-mcp requested, not
|
|
103
|
+
values independently confirmed by the rendered Home Assistant frontend.
|
|
103
104
|
"""
|
|
104
105
|
|
|
105
106
|
data: bytes
|
|
@@ -536,7 +537,7 @@ async def _read_image_response(
|
|
|
536
537
|
"received_content_type": response_mime_type or None,
|
|
537
538
|
},
|
|
538
539
|
suggestions=[
|
|
539
|
-
"Verify the URL points to
|
|
540
|
+
"Verify the URL points to a supported screenshot engine",
|
|
540
541
|
"Check that the screenshot engine supports the "
|
|
541
542
|
+ f"requested {image_format} format",
|
|
542
543
|
],
|
|
@@ -601,7 +602,7 @@ async def _read_image_response(
|
|
|
601
602
|
"received_signature_hex": image_data[:12].hex(),
|
|
602
603
|
},
|
|
603
604
|
suggestions=[
|
|
604
|
-
"Verify the URL points to
|
|
605
|
+
"Verify the URL points to a supported screenshot engine",
|
|
605
606
|
"Check whether an authentication or proxy page was returned "
|
|
606
607
|
+ "with an incorrect image Content-Type",
|
|
607
608
|
],
|
|
@@ -615,7 +616,9 @@ async def _request_viewport_image(
|
|
|
615
616
|
*,
|
|
616
617
|
url: str,
|
|
617
618
|
path: str,
|
|
618
|
-
|
|
619
|
+
engine_url: str,
|
|
620
|
+
engine_kind: EngineKind | None,
|
|
621
|
+
engine_version: str | None,
|
|
619
622
|
params: dict[str, str],
|
|
620
623
|
options: _CaptureOptions,
|
|
621
624
|
viewport: _ViewportRequest,
|
|
@@ -641,13 +644,13 @@ async def _request_viewport_image(
|
|
|
641
644
|
and viewport.height == "auto"
|
|
642
645
|
and not fallback_used
|
|
643
646
|
):
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
647
|
+
if is_legacy_puppet(engine_kind, engine_version):
|
|
648
|
+
fallback_used = True
|
|
649
|
+
capture_height = MAX_VIEWPORT_DIMENSION
|
|
650
|
+
params["viewport"] = (
|
|
651
|
+
f"{viewport.width}x{MAX_VIEWPORT_DIMENSION}"
|
|
652
|
+
)
|
|
653
|
+
continue
|
|
651
654
|
raise_tool_error(
|
|
652
655
|
create_error_response(
|
|
653
656
|
ErrorCode.SERVICE_CALL_FAILED,
|
|
@@ -657,6 +660,8 @@ async def _request_viewport_image(
|
|
|
657
660
|
context={
|
|
658
661
|
**request_context,
|
|
659
662
|
"status_code": response.status_code,
|
|
663
|
+
"engine_kind": engine_kind or "unknown",
|
|
664
|
+
"engine_version": engine_version,
|
|
660
665
|
"legacy_full_page_fallback_attempted": fallback_used,
|
|
661
666
|
},
|
|
662
667
|
suggestions=[
|
|
@@ -684,7 +689,7 @@ async def _request_viewport_image(
|
|
|
684
689
|
details=str(exc),
|
|
685
690
|
context={
|
|
686
691
|
**request_context,
|
|
687
|
-
"engine_url":
|
|
692
|
+
"engine_url": engine_url,
|
|
688
693
|
"render_timeout_seconds": options.render_timeout_seconds,
|
|
689
694
|
},
|
|
690
695
|
suggestions=[
|
|
@@ -698,16 +703,14 @@ async def _request_viewport_image(
|
|
|
698
703
|
raise_tool_error(
|
|
699
704
|
create_error_response(
|
|
700
705
|
ErrorCode.CONNECTION_FAILED,
|
|
701
|
-
f"Could not reach the dashboard screenshot engine at {
|
|
706
|
+
f"Could not reach the dashboard screenshot engine at {engine_url}.",
|
|
702
707
|
details=str(exc),
|
|
703
|
-
context={**request_context, "engine_url":
|
|
708
|
+
context={**request_context, "engine_url": engine_url},
|
|
704
709
|
suggestions=[
|
|
705
|
-
"Ensure the
|
|
706
|
-
+ "is installed and running",
|
|
710
|
+
"Ensure the screenshot engine app or sidecar is installed and running",
|
|
707
711
|
"If it is running, its access token is likely "
|
|
708
712
|
+ f"missing or invalid — {TOKEN_HINT}",
|
|
709
|
-
"Check HAMCP_DASHBOARD_SCREENSHOT_ENGINE_URL
|
|
710
|
-
+ "Docker/Container deployments",
|
|
713
|
+
"Check HAMCP_DASHBOARD_SCREENSHOT_ENGINE_URL for Docker/Container deployments",
|
|
711
714
|
],
|
|
712
715
|
)
|
|
713
716
|
)
|
|
@@ -719,7 +722,9 @@ async def _request_or_collect_failure(
|
|
|
719
722
|
*,
|
|
720
723
|
url: str,
|
|
721
724
|
path: str,
|
|
722
|
-
|
|
725
|
+
engine_url: str,
|
|
726
|
+
engine_kind: EngineKind | None,
|
|
727
|
+
engine_version: str | None,
|
|
723
728
|
params: dict[str, str],
|
|
724
729
|
options: _CaptureOptions,
|
|
725
730
|
viewport: _ViewportRequest,
|
|
@@ -735,7 +740,9 @@ async def _request_or_collect_failure(
|
|
|
735
740
|
http_client,
|
|
736
741
|
url=url,
|
|
737
742
|
path=path,
|
|
738
|
-
|
|
743
|
+
engine_url=engine_url,
|
|
744
|
+
engine_kind=engine_kind,
|
|
745
|
+
engine_version=engine_version,
|
|
739
746
|
params=params,
|
|
740
747
|
options=options,
|
|
741
748
|
viewport=viewport,
|
|
@@ -775,7 +782,7 @@ def _viewport_params(
|
|
|
775
782
|
if options.theme is not None:
|
|
776
783
|
params["theme"] = options.theme
|
|
777
784
|
if options.dark_mode:
|
|
778
|
-
#
|
|
785
|
+
# Both supported engines interpret an empty `dark` value as true.
|
|
779
786
|
params["dark"] = ""
|
|
780
787
|
if options.language is not None:
|
|
781
788
|
params["lang"] = options.language
|
|
@@ -881,8 +888,8 @@ async def capture_dashboard_images(
|
|
|
881
888
|
viewports = _capture_viewports(options)
|
|
882
889
|
|
|
883
890
|
engine_target = await resolve_engine()
|
|
884
|
-
|
|
885
|
-
url = f"{
|
|
891
|
+
engine_url = engine_target.url
|
|
892
|
+
url = f"{engine_url}/{path}"
|
|
886
893
|
mime_type = _MIME_TYPES[options.image_format]
|
|
887
894
|
captures: list[DashboardImageCapture] = []
|
|
888
895
|
|
|
@@ -935,7 +942,9 @@ async def capture_dashboard_images(
|
|
|
935
942
|
http_client,
|
|
936
943
|
url=url,
|
|
937
944
|
path=path,
|
|
938
|
-
|
|
945
|
+
engine_url=engine_url,
|
|
946
|
+
engine_kind=engine_target.engine_kind,
|
|
947
|
+
engine_version=engine_target.engine_version,
|
|
939
948
|
params=params,
|
|
940
949
|
options=options,
|
|
941
950
|
viewport=viewport,
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"""Compatibility checks for screenshot-engine API differences."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from packaging.version import InvalidVersion, Version
|
|
6
|
+
|
|
7
|
+
from .provision import EngineKind
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def is_legacy_puppet(engine_kind: EngineKind | None, version: str | None) -> bool:
|
|
11
|
+
"""Return whether a verified Puppet version predates WIDTHxauto support."""
|
|
12
|
+
if engine_kind != "puppet" or not version:
|
|
13
|
+
return False
|
|
14
|
+
try:
|
|
15
|
+
return Version(version) < Version("2.5.0")
|
|
16
|
+
except InvalidVersion:
|
|
17
|
+
return False
|
{ha_mcp_dev-9.0.1.dev3235 → ha_mcp_dev-9.1.0.dev3241}/src/ha_mcp/dashboard_screenshot/paths.py
RENAMED
|
@@ -442,7 +442,7 @@ def resolve_dashboard_view(
|
|
|
442
442
|
elif has_static_views:
|
|
443
443
|
warning = (
|
|
444
444
|
"No view_path was supplied; the dashboard base route renders "
|
|
445
|
-
"the first view visible to
|
|
445
|
+
"the first view visible to the screenshot engine's Home Assistant user."
|
|
446
446
|
)
|
|
447
447
|
else:
|
|
448
448
|
warning = (
|
|
@@ -672,7 +672,7 @@ async def resolve_dashboard_render_target(
|
|
|
672
672
|
stable=False,
|
|
673
673
|
warnings=(
|
|
674
674
|
"No named view path was supplied; the built-in dashboard base route "
|
|
675
|
-
"renders the first view visible to
|
|
675
|
+
"renders the first view visible to the screenshot engine's Home Assistant user.",
|
|
676
676
|
),
|
|
677
677
|
)
|
|
678
678
|
config = await fetch_dashboard_render_config(client, url_path)
|
|
@@ -0,0 +1,387 @@
|
|
|
1
|
+
"""Locate a supported dashboard screenshot engine for this deployment.
|
|
2
|
+
|
|
3
|
+
The supported engines are balloob's **Puppet** app and the **WPE Screenshot
|
|
4
|
+
Engine** app. ha-mcp does not vendor either engine — the user installs them.
|
|
5
|
+
|
|
6
|
+
Three deployment modes, resolved lazily on first tool use (never at
|
|
7
|
+
startup, never silently installed):
|
|
8
|
+
|
|
9
|
+
1. **Explicit** — ``HAMCP_DASHBOARD_SCREENSHOT_ENGINE_URL`` is set. Used
|
|
10
|
+
verbatim. This is the Docker / Container path (a docker-compose
|
|
11
|
+
sidecar), and also lets HA OS users override auto-discovery.
|
|
12
|
+
2. **HA OS / Supervised** — ``SUPERVISOR_TOKEN`` is present. A supported app
|
|
13
|
+
(slug ``*_puppet`` or ``*_wpe_screenshot_engine``) is verified through the
|
|
14
|
+
Supervisor REST API and reached on the internal network by its hostname.
|
|
15
|
+
The user must install and start the app themselves — we never auto-install.
|
|
16
|
+
3. **Neither** (stdio / standalone) — a clear :class:`ToolError` explaining
|
|
17
|
+
how to enable it.
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
from __future__ import annotations
|
|
21
|
+
|
|
22
|
+
import logging
|
|
23
|
+
import os
|
|
24
|
+
from dataclasses import dataclass
|
|
25
|
+
from typing import Any, Literal
|
|
26
|
+
|
|
27
|
+
import httpx
|
|
28
|
+
|
|
29
|
+
from ha_mcp._vendor.fastmcp.exceptions import ToolError
|
|
30
|
+
|
|
31
|
+
from ..errors import ErrorCode, create_error_response
|
|
32
|
+
from ..tools.helpers import raise_tool_error
|
|
33
|
+
from .theme_guard import EngineCredential, addon_credential_from_options
|
|
34
|
+
|
|
35
|
+
logger = logging.getLogger(__name__)
|
|
36
|
+
|
|
37
|
+
EngineKind = Literal["puppet", "wpe"]
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
@dataclass(frozen=True, slots=True)
|
|
41
|
+
class EngineTarget:
|
|
42
|
+
"""A resolved screenshot engine endpoint.
|
|
43
|
+
|
|
44
|
+
``addon_credential`` authenticates as Puppet's user (extracted from its
|
|
45
|
+
Supervisor options during discovery, so the theme guard needs no second
|
|
46
|
+
round-trip and the raw secret-bearing options dict never leaves this
|
|
47
|
+
module). ``engine_kind`` and ``engine_version`` are populated only when
|
|
48
|
+
Supervisor verifies the selected app. An explicit URL does not prove which
|
|
49
|
+
engine or version it targets. WPE temporarily applies frontend preferences
|
|
50
|
+
and does not need the guard credential. An explicit URL may still carry
|
|
51
|
+
Puppet's credential when Supervisor discovery finds it. The token never
|
|
52
|
+
leaves the server process — it must not be logged or surfaced in responses.
|
|
53
|
+
"""
|
|
54
|
+
|
|
55
|
+
url: str
|
|
56
|
+
engine_kind: EngineKind | None = None
|
|
57
|
+
engine_version: str | None = None
|
|
58
|
+
addon_credential: EngineCredential | None = None
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
@dataclass(frozen=True, slots=True)
|
|
62
|
+
class _EngineProfile:
|
|
63
|
+
"""Supervisor identity and network details for a supported renderer."""
|
|
64
|
+
|
|
65
|
+
name: str
|
|
66
|
+
kind: EngineKind
|
|
67
|
+
slug_suffix: str
|
|
68
|
+
port: int
|
|
69
|
+
required_schema_options: frozenset[str]
|
|
70
|
+
has_persistent_theme_override: bool = False
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
_PUPPET = _EngineProfile(
|
|
74
|
+
name="Puppet",
|
|
75
|
+
kind="puppet",
|
|
76
|
+
slug_suffix="_puppet",
|
|
77
|
+
port=10000,
|
|
78
|
+
required_schema_options=frozenset(
|
|
79
|
+
{"access_token", "home_assistant_url", "keep_browser_open"}
|
|
80
|
+
),
|
|
81
|
+
has_persistent_theme_override=True,
|
|
82
|
+
)
|
|
83
|
+
_WPE = _EngineProfile(
|
|
84
|
+
name="WPE Screenshot Engine",
|
|
85
|
+
kind="wpe",
|
|
86
|
+
slug_suffix="_wpe_screenshot_engine",
|
|
87
|
+
port=8080,
|
|
88
|
+
required_schema_options=frozenset(
|
|
89
|
+
{"home_assistant_url", "home_assistant_token", "dashboard_path"}
|
|
90
|
+
),
|
|
91
|
+
)
|
|
92
|
+
_SUPPORTED_ENGINES = (_PUPPET, _WPE)
|
|
93
|
+
|
|
94
|
+
_PUPPET_REPO_URL = "https://github.com/balloob/home-assistant-addons"
|
|
95
|
+
_WPE_REPO_URL = "https://github.com/Nischay-Pro/ha-wpe-screenshot-engine"
|
|
96
|
+
|
|
97
|
+
# The single source of truth for the "configure the engine token" instruction,
|
|
98
|
+
# reused across every engine-troubleshooting message here and in capture.py so
|
|
99
|
+
# a copy edit only has to happen once.
|
|
100
|
+
TOKEN_HINT = (
|
|
101
|
+
"set the engine's token option ('access_token' for "
|
|
102
|
+
"Puppet or 'home_assistant_token' for WPE Screenshot Engine) to a "
|
|
103
|
+
"Home Assistant long-lived access token (create one in Profile > Security, "
|
|
104
|
+
"ideally for a dedicated low-privilege user) and (re)start it"
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
_INSTALL_HELP = (
|
|
108
|
+
"Dashboard screenshot mode is enabled, but no supported screenshot "
|
|
109
|
+
"engine app is installed. On HA OS / Supervised, add either balloob's "
|
|
110
|
+
f"repository ({_PUPPET_REPO_URL}) or WPE Screenshot Engine's repository "
|
|
111
|
+
f"({_WPE_REPO_URL}) under Settings > Apps > Install app > ⋮ > Repositories "
|
|
112
|
+
"(Settings > Add-ons > Add-on store before Home Assistant 2026.2), then "
|
|
113
|
+
"install and start Puppet or WPE Screenshot Engine. "
|
|
114
|
+
f"{TOKEN_HINT}. On Docker / Container, run "
|
|
115
|
+
"one of these engines as a sidecar and set "
|
|
116
|
+
"HAMCP_DASHBOARD_SCREENSHOT_ENGINE_URL to its reachable URL."
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
_NOT_STARTED_HELP = (
|
|
120
|
+
"The supported screenshot engine app is installed but not started. Open "
|
|
121
|
+
"Settings > Apps > the selected engine (Settings > Add-ons before Home "
|
|
122
|
+
f"Assistant 2026.2), {TOKEN_HINT}. "
|
|
123
|
+
"Enable 'Start on boot' to keep it available."
|
|
124
|
+
)
|
|
125
|
+
|
|
126
|
+
_STDIO_HELP = (
|
|
127
|
+
"Dashboard screenshot mode needs either HA OS / Supervised with a "
|
|
128
|
+
"supported screenshot engine app installed, or a screenshot-engine "
|
|
129
|
+
"sidecar reachable via HAMCP_DASHBOARD_SCREENSHOT_ENGINE_URL. This "
|
|
130
|
+
"deployment (stdio / standalone) can host neither — see docs/beta.md."
|
|
131
|
+
)
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
def _verified_engine_profile(
|
|
135
|
+
slug: str, info: dict[str, Any], profiles: tuple[_EngineProfile, ...]
|
|
136
|
+
) -> _EngineProfile | None:
|
|
137
|
+
"""Return the profile whose slug, app name and schema all match."""
|
|
138
|
+
schema = info.get("schema")
|
|
139
|
+
schema_names = {
|
|
140
|
+
str(item.get("name"))
|
|
141
|
+
for item in schema or []
|
|
142
|
+
if isinstance(item, dict) and item.get("name") is not None
|
|
143
|
+
}
|
|
144
|
+
for profile in profiles:
|
|
145
|
+
if (
|
|
146
|
+
slug.endswith(profile.slug_suffix)
|
|
147
|
+
and info.get("name") == profile.name
|
|
148
|
+
and profile.required_schema_options <= schema_names
|
|
149
|
+
):
|
|
150
|
+
return profile
|
|
151
|
+
return None
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
def _select_started_verified_engine(
|
|
155
|
+
addon_infos: list[tuple[str, dict[str, Any]]],
|
|
156
|
+
profiles: tuple[_EngineProfile, ...] = _SUPPORTED_ENGINES,
|
|
157
|
+
) -> tuple[str, dict[str, Any], _EngineProfile]:
|
|
158
|
+
"""Select one started app that exactly matches a supported engine."""
|
|
159
|
+
verified: list[tuple[str, dict[str, Any], _EngineProfile]] = []
|
|
160
|
+
for slug, info in addon_infos:
|
|
161
|
+
profile = _verified_engine_profile(slug, info, profiles)
|
|
162
|
+
if profile is not None:
|
|
163
|
+
verified.append((slug, info, profile))
|
|
164
|
+
if not verified:
|
|
165
|
+
raise_tool_error(
|
|
166
|
+
create_error_response(
|
|
167
|
+
ErrorCode.CONFIG_VALIDATION_FAILED,
|
|
168
|
+
"Installed screenshot engine apps did not match a supported "
|
|
169
|
+
"engine's expected identity and schema.",
|
|
170
|
+
context={"matched_slugs": [slug for slug, _ in addon_infos]},
|
|
171
|
+
suggestions=[
|
|
172
|
+
"Verify the app is Puppet or WPE Screenshot Engine and "
|
|
173
|
+
"matches its repository configuration"
|
|
174
|
+
],
|
|
175
|
+
)
|
|
176
|
+
)
|
|
177
|
+
started = [item for item in verified if item[1].get("state") == "started"]
|
|
178
|
+
if not started:
|
|
179
|
+
raise_tool_error(
|
|
180
|
+
create_error_response(
|
|
181
|
+
ErrorCode.SERVICE_CALL_FAILED,
|
|
182
|
+
"The schema-verified screenshot engine app is not started.",
|
|
183
|
+
details=_NOT_STARTED_HELP,
|
|
184
|
+
context={"matched_slugs": [slug for slug, _, _ in verified]},
|
|
185
|
+
)
|
|
186
|
+
)
|
|
187
|
+
if len(started) > 1:
|
|
188
|
+
raise_tool_error(
|
|
189
|
+
create_error_response(
|
|
190
|
+
ErrorCode.CONFIG_VALIDATION_FAILED,
|
|
191
|
+
"Multiple started screenshot engine apps matched supported "
|
|
192
|
+
"schemas; "
|
|
193
|
+
"refusing an ambiguous target.",
|
|
194
|
+
context={"matched_slugs": [slug for slug, _, _ in started]},
|
|
195
|
+
)
|
|
196
|
+
)
|
|
197
|
+
return started[0]
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
def _supervisor_response_data(payload: Any, endpoint: str) -> dict[str, Any]:
|
|
201
|
+
"""Return a Supervisor response's object-shaped data payload."""
|
|
202
|
+
if not isinstance(payload, dict):
|
|
203
|
+
raise ValueError(f"Supervisor {endpoint} returned a non-object payload")
|
|
204
|
+
data = payload.get("data")
|
|
205
|
+
if not isinstance(data, dict):
|
|
206
|
+
raise ValueError(f"Supervisor {endpoint} returned invalid data")
|
|
207
|
+
return data
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
def _supervisor_addon_listing(payload: Any) -> list[dict[str, Any]]:
|
|
211
|
+
"""Return the validated add-on objects from a Supervisor list response."""
|
|
212
|
+
addons = _supervisor_response_data(payload, "/addons").get("addons")
|
|
213
|
+
if not isinstance(addons, list) or not all(
|
|
214
|
+
isinstance(addon, dict) for addon in addons
|
|
215
|
+
):
|
|
216
|
+
raise ValueError("Supervisor /addons returned an invalid addons list")
|
|
217
|
+
return addons
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
async def resolve_engine() -> EngineTarget:
|
|
221
|
+
"""Resolve the screenshot engine endpoint, or raise ToolError.
|
|
222
|
+
|
|
223
|
+
See module docstring for the three-mode resolution order.
|
|
224
|
+
"""
|
|
225
|
+
from ..config import get_global_settings
|
|
226
|
+
|
|
227
|
+
explicit = (get_global_settings().dashboard_screenshot_engine_url or "").strip()
|
|
228
|
+
if explicit:
|
|
229
|
+
return EngineTarget(
|
|
230
|
+
url=explicit.rstrip("/"),
|
|
231
|
+
addon_credential=await _addon_credential_best_effort(),
|
|
232
|
+
)
|
|
233
|
+
|
|
234
|
+
if os.environ.get("SUPERVISOR_TOKEN"):
|
|
235
|
+
return await _discover_engine_via_supervisor()
|
|
236
|
+
|
|
237
|
+
raise_tool_error(
|
|
238
|
+
create_error_response(
|
|
239
|
+
ErrorCode.SERVICE_CALL_FAILED,
|
|
240
|
+
"Dashboard screenshot mode is not available in this deployment.",
|
|
241
|
+
details=_STDIO_HELP,
|
|
242
|
+
suggestions=[
|
|
243
|
+
"Use HA OS / Supervised and install the screenshot engine app",
|
|
244
|
+
"Or run the engine as a sidecar and set "
|
|
245
|
+
+ "HAMCP_DASHBOARD_SCREENSHOT_ENGINE_URL",
|
|
246
|
+
],
|
|
247
|
+
)
|
|
248
|
+
)
|
|
249
|
+
# raise_tool_error is typed -> NoReturn, but CodeQL cannot see that, so it
|
|
250
|
+
# reports py/mixed-returns for the implicit None fall-through past it. Keep
|
|
251
|
+
# this terminal statement to suppress that false positive (repo convention).
|
|
252
|
+
raise AssertionError("unreachable: raise_tool_error always raises")
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
async def _addon_credential_best_effort() -> EngineCredential | None:
|
|
256
|
+
"""Best-effort theme-guard credential for an explicitly configured URL.
|
|
257
|
+
|
|
258
|
+
HA OS / Supervised users may set ``HAMCP_DASHBOARD_SCREENSHOT_ENGINE_URL``
|
|
259
|
+
to override auto-discovery while still running Puppet; without its token
|
|
260
|
+
the theme guard would go inactive exactly where the app credential exists
|
|
261
|
+
(``_client_credential`` refuses Supervisor-proxy auth).
|
|
262
|
+
Any failure — no Supervisor, no verified add-on, not started — simply
|
|
263
|
+
means "no credential": the explicit URL may point at a non-add-on
|
|
264
|
+
engine, so this must never raise. If the explicit URL targets a
|
|
265
|
+
different engine than the discovered add-on, the guard still only ever
|
|
266
|
+
writes back a value that the discovered add-on's own user changed
|
|
267
|
+
mid-capture, which only that add-on's renders would do — a safe no-op.
|
|
268
|
+
"""
|
|
269
|
+
if not os.environ.get("SUPERVISOR_TOKEN"):
|
|
270
|
+
return None
|
|
271
|
+
try:
|
|
272
|
+
# The theme guard is specific to Puppet, whose current renderer writes
|
|
273
|
+
# theme changes to the Home Assistant user profile. WPE applies these
|
|
274
|
+
# options temporarily and suppresses the corresponding user-data write.
|
|
275
|
+
return (
|
|
276
|
+
await _discover_engine_via_supervisor(preferred_engine="Puppet")
|
|
277
|
+
).addon_credential
|
|
278
|
+
except Exception:
|
|
279
|
+
logger.debug(
|
|
280
|
+
"No Supervisor-discoverable engine credential for the explicit "
|
|
281
|
+
"engine URL; the theme guard stays inactive.",
|
|
282
|
+
exc_info=True,
|
|
283
|
+
)
|
|
284
|
+
return None
|
|
285
|
+
|
|
286
|
+
|
|
287
|
+
async def _discover_engine_via_supervisor(
|
|
288
|
+
*, preferred_engine: str | None = None
|
|
289
|
+
) -> EngineTarget:
|
|
290
|
+
"""Find one supported app through the Supervisor and return its endpoint.
|
|
291
|
+
|
|
292
|
+
Requires the ha-mcp add-on's ``manager`` role (already declared) for the
|
|
293
|
+
read-only ``/addons`` + ``/addons/<slug>/info`` endpoints. Raises a
|
|
294
|
+
ToolError with actionable guidance when no matching engine is available.
|
|
295
|
+
``preferred_engine`` is used only for the best-effort Puppet theme guard
|
|
296
|
+
when the operator configured an explicit URL.
|
|
297
|
+
"""
|
|
298
|
+
from ..client.supervisor_client import make_supervisor_httpx_client
|
|
299
|
+
|
|
300
|
+
try:
|
|
301
|
+
async with make_supervisor_httpx_client(timeout=15.0, verify=True) as sup:
|
|
302
|
+
listing = await sup.get("/addons")
|
|
303
|
+
listing.raise_for_status()
|
|
304
|
+
addons = _supervisor_addon_listing(listing.json())
|
|
305
|
+
|
|
306
|
+
profiles = tuple(
|
|
307
|
+
profile
|
|
308
|
+
for profile in _SUPPORTED_ENGINES
|
|
309
|
+
if preferred_engine is None or profile.name == preferred_engine
|
|
310
|
+
)
|
|
311
|
+
matches = [
|
|
312
|
+
a
|
|
313
|
+
for a in addons
|
|
314
|
+
if str(a.get("slug", "")).endswith(
|
|
315
|
+
tuple(profile.slug_suffix for profile in profiles)
|
|
316
|
+
)
|
|
317
|
+
]
|
|
318
|
+
if not matches:
|
|
319
|
+
engine_names = (
|
|
320
|
+
[preferred_engine]
|
|
321
|
+
if preferred_engine
|
|
322
|
+
else [profile.name for profile in _SUPPORTED_ENGINES]
|
|
323
|
+
)
|
|
324
|
+
raise_tool_error(
|
|
325
|
+
create_error_response(
|
|
326
|
+
ErrorCode.RESOURCE_NOT_FOUND,
|
|
327
|
+
"A supported screenshot engine app is not installed.",
|
|
328
|
+
context={"supported_engines": engine_names},
|
|
329
|
+
details=_INSTALL_HELP,
|
|
330
|
+
)
|
|
331
|
+
)
|
|
332
|
+
|
|
333
|
+
# The /addons list is only reliable for slug discovery (the
|
|
334
|
+
# repo-hash prefix is not known ahead of time). Per-addon details
|
|
335
|
+
# are authoritative on /addons/<slug>/info — the same source
|
|
336
|
+
# ha_manage_app trusts.
|
|
337
|
+
addon_infos: list[tuple[str, dict[str, Any]]] = []
|
|
338
|
+
for match in matches:
|
|
339
|
+
slug = str(match["slug"])
|
|
340
|
+
info = await sup.get(f"/addons/{slug}/info")
|
|
341
|
+
info.raise_for_status()
|
|
342
|
+
data = _supervisor_response_data(info.json(), f"/addons/{slug}/info")
|
|
343
|
+
addon_infos.append((slug, data))
|
|
344
|
+
slug, data, profile = _select_started_verified_engine(addon_infos, profiles)
|
|
345
|
+
hostname = data.get("hostname") or data.get("ip_address")
|
|
346
|
+
if not hostname:
|
|
347
|
+
raise_tool_error(
|
|
348
|
+
create_error_response(
|
|
349
|
+
ErrorCode.SERVICE_CALL_FAILED,
|
|
350
|
+
f"Screenshot engine app '{slug}' is started but "
|
|
351
|
+
"the Supervisor returned no hostname/ip_address.",
|
|
352
|
+
context={"slug": slug},
|
|
353
|
+
)
|
|
354
|
+
)
|
|
355
|
+
options = data.get("options")
|
|
356
|
+
app_version = data.get("version")
|
|
357
|
+
return EngineTarget(
|
|
358
|
+
url=f"http://{hostname}:{profile.port}",
|
|
359
|
+
engine_kind=profile.kind,
|
|
360
|
+
engine_version=(
|
|
361
|
+
app_version.strip()
|
|
362
|
+
if isinstance(app_version, str) and app_version.strip()
|
|
363
|
+
else None
|
|
364
|
+
),
|
|
365
|
+
addon_credential=(
|
|
366
|
+
addon_credential_from_options(
|
|
367
|
+
options if isinstance(options, dict) else None
|
|
368
|
+
)
|
|
369
|
+
if profile.has_persistent_theme_override
|
|
370
|
+
else None
|
|
371
|
+
),
|
|
372
|
+
)
|
|
373
|
+
except ToolError:
|
|
374
|
+
raise
|
|
375
|
+
except (httpx.HTTPError, KeyError, ValueError) as e:
|
|
376
|
+
logger.warning("Screenshot engine discovery via Supervisor failed: %s", e)
|
|
377
|
+
raise_tool_error(
|
|
378
|
+
create_error_response(
|
|
379
|
+
ErrorCode.CONNECTION_FAILED,
|
|
380
|
+
"Could not query the Supervisor to locate the screenshot engine app.",
|
|
381
|
+
details=str(e),
|
|
382
|
+
suggestions=[
|
|
383
|
+
"Verify the screenshot engine app is installed and started",
|
|
384
|
+
"Or set HAMCP_DASHBOARD_SCREENSHOT_ENGINE_URL explicitly",
|
|
385
|
+
],
|
|
386
|
+
)
|
|
387
|
+
)
|