ha-mcp-dev 8.6.0.dev2934__tar.gz → 8.6.0.dev2941__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-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/PKG-INFO +1 -1
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/pyproject.toml +1 -1
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/pyproject.toml.orig +1 -1
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/errors.py +6 -1
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/locales/az.json +1 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/locales/cs.json +1 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/locales/de.json +1 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/locales/eo.json +1 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/locales/es.json +1 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/locales/fr.json +1 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/locales/it.json +1 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/locales/ko.json +1 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/locales/nl.json +1 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/locales/pl.json +1 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/locales/ru.json +1 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/locales/sv.json +1 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/locales/zh-Hans.json +1 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/locales/zh-Hant.json +1 -0
- ha_mcp_dev-8.6.0.dev2941/src/ha_mcp/tools/config_write_errors.py +185 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_config_automations.py +22 -57
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/validation_middleware.py +93 -9
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/LICENSE +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/README.md +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/__main__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_pypi_marker +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_rich_compat.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/requirements.txt +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/client.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/server.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_vendor/websockets/version.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/_version.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/app_discovery.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/auth/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/auth/consent_form.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/auth/oidc_compat.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/auth/provider.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/backup_diff.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/backup_entity_ids.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/backup_manager.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/backup_tags.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/browser_landing.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/client/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/client/admin_routes.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/client/rest_client.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/client/supervisor_client.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/client/websocket_client.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/client/websocket_listener.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/config.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/config_backup.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/config_meta.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/config_overrides.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/config_registry.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/config_settings.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/ha_request_queue.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/hacs_auto_refresh.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/http_transport.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/image_info.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/llm_exposure.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/log_filters.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/policy/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/policy/approval_queue.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/policy/decision_pin.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/policy/decisions.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/policy/editing.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/policy/evaluator.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/policy/events.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/policy/handlers.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/policy/middleware.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/policy/model.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/policy/mrtr.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/policy/persistence.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/policy/server_channels.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/policy/value_sources.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/py.typed +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/read_only.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/redaction.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/renamed_tools.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-actions.md +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/triggers-and-conditions.md +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/server.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/server_lifespan.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/server_tool_text.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/_i18n.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/_persistence.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/_theme.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/locales/README.md +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/locales/en.json +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/settings.css +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/settings.html +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/settings_js/01_i18n_state.js +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/settings_js/02_tools_restart.js +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/settings_js/03_render_save.js +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/settings_js/04_backups.js +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/settings_js/05_feature_flags.js +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/settings_js/06_policy_cards.js +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/settings_js/07_policy_actions.js +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/settings_js/08_advanced.js +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/settings_js/09_prefs_visibility.js +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/smoke_test.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/strict_bps.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tool_dispatch.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/area_messages.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/auto_backup.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/backup.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/backup_access.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/backup_on_demand.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/best_practice_checker.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/best_practice_result.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/best_practice_variables.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/blueprint_sources.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/blueprint_write.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/bug_report_config.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/bug_report_templates.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/bulk_selector.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/coercion.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/component_api.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/component_config_entries.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/component_config_reads.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/component_devices.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/component_helper_collections.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/component_registries.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/config_entry_backup.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/config_entry_flow.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/config_entry_flow_introspect.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/config_entry_identity.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/config_helpers/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/config_helpers/core_payload.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/config_helpers/create.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/config_helpers/describe.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/config_helpers/flow.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/config_helpers/listing.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/config_helpers/registry.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/config_helpers/schemas.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/config_helpers/typed_config.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/config_helpers/update.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/config_helpers/validation.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/config_subentry_restore.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/config_write_helpers.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/dashboard_list_checks.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/dev_backup.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/device_control.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/device_enrichment.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/diagnostics_helpers.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/entity_param_parsing.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/entity_registration.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/entity_update_fields.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/error_log_parsing.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/hacs_registration.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/helpers.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/log_common.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/log_sources.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/log_sources_fault.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/radio/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/radio/base.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/radio/matter.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/radio/thread.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/radio/zigbee.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/radio/zwave.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/radio/zwave_parameters.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/reference_validator.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/registry.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/response_helpers.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/scene_discovery.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/search/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/search/base.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/search/component.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/search/entities.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/search/legacy.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/search/modes.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/search/overview.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/search/response.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/search/state.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/smart_search/_base.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/smart_search/_config.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tool_hints.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_addons.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_areas.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_blueprints.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_bug_report.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_calendar.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_camera.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_categories.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_code.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_dev.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_energy.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_entities.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_filesystem.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_groups.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_hacs.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_history.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_integrations.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_labels.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_logs.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_radio.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_registry.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_resources.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_search.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_security_policy.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_service.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_services.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_system.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_themes.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_todo.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_traces.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_updates.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_utility.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_zones.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/util_helpers.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/ws_waiters.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/transforms/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/transforms/categorized_search.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/transforms/component_helpers.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/transforms/component_search.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/transforms/write_tool_note.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/transport_security.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/update_check.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/utils/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/utils/config_hash.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/utils/config_write_lock.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/utils/dashboard_patch.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/utils/data_paths.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/utils/domain_handlers.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/utils/entity_membership.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/utils/fuzzy_search.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/utils/mcp_client_host.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/utils/operation_manager.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/utils/python_sandbox.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/utils/registry_update_lock.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/utils/skill_loader.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/utils/usage_logger.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/visibility/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/visibility/enforcement.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/visibility/model.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/visibility/persistence.py +0 -0
- {ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/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 = "8.6.0.
|
|
7
|
+
version = "8.6.0.dev2941"
|
|
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 = "8.6.0.
|
|
7
|
+
version = "8.6.0.dev2941"
|
|
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
|
|
@@ -466,6 +466,7 @@ def create_validation_error(
|
|
|
466
466
|
details: str | None = None,
|
|
467
467
|
invalid_json: bool = False,
|
|
468
468
|
context: dict[str, Any] | None = None,
|
|
469
|
+
suggestions: list[str] | None = None,
|
|
469
470
|
) -> dict[str, Any]:
|
|
470
471
|
"""Create a validation error response."""
|
|
471
472
|
code = (
|
|
@@ -480,7 +481,11 @@ def create_validation_error(
|
|
|
480
481
|
if parameter:
|
|
481
482
|
final_context["parameter"] = parameter
|
|
482
483
|
return create_error_response(
|
|
483
|
-
code,
|
|
484
|
+
code,
|
|
485
|
+
message,
|
|
486
|
+
details,
|
|
487
|
+
suggestions=suggestions,
|
|
488
|
+
context=final_context if final_context else None,
|
|
484
489
|
)
|
|
485
490
|
|
|
486
491
|
|
{ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/locales/az.json
RENAMED
|
@@ -303,6 +303,7 @@
|
|
|
303
303
|
"backup.restore.safety": "Qoruyucu ehtiyat nüsxə: {name}. Əvvəlki vəziyyətə qayıtmaq üçün bu qoruyucu ehtiyat nüsxəni bərpa etməzdən əvvəl cari konfiqurasiyanı yoxlayın.",
|
|
304
304
|
"backup.restore.reason.unsupported_form": "Home Assistant bu bərpa üçün uyğun forma təqdim etmədi.",
|
|
305
305
|
"backup.restore.reason.unsupported_fields": "Anlıq nüsxənin bəzi sahələri cari forma tərəfindən qəbul edilmir.",
|
|
306
|
+
"backup.restore.reason.identity_changed": "Bəzi ehtiyat nüsxə sahələri heç bir bərpa forması tərəfindən təklif olunmur (onlar yaradılarkən təyin edilir) və onlar ehtiyat nüsxəsi yaradıldıqdan sonra dəyişdirilib.",
|
|
306
307
|
"backup.restore.reason.validation_failed": "Home Assistant bərpa edilmiş konfiqurasiyanı etibarsız hesab edərək rədd etdi.",
|
|
307
308
|
"backup.restore.reason.flow_aborted": "Home Assistant bərpa prosesini dayandırdı.",
|
|
308
309
|
"backup.restore.fields": "Sahələr: {fields}",
|
{ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/locales/cs.json
RENAMED
|
@@ -303,6 +303,7 @@
|
|
|
303
303
|
"backup.restore.safety": "Bezpečnostní záloha: {name}. Před obnovením této bezpečnostní zálohy za účelem obnovení předchozího stavu zkontrolujte aktuální konfiguraci.",
|
|
304
304
|
"backup.restore.reason.unsupported_form": "Home Assistant neposkytl formulář vhodný pro toto obnovení.",
|
|
305
305
|
"backup.restore.reason.unsupported_fields": "Některá pole snímku nejsou aktuálním formulářem akceptována.",
|
|
306
|
+
"backup.restore.reason.identity_changed": "Některá pole snímku nejsou v žádném formuláři pro obnovení k dispozici (jsou nastavena při vytvoření) a od vytvoření zálohy se změnila.",
|
|
306
307
|
"backup.restore.reason.validation_failed": "Home Assistant odmítl obnovenou konfiguraci jako neplatnou.",
|
|
307
308
|
"backup.restore.reason.flow_aborted": "Home Assistant přerušil proces obnovení.",
|
|
308
309
|
"backup.restore.fields": "Pole: {fields}",
|
{ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/locales/de.json
RENAMED
|
@@ -303,6 +303,7 @@
|
|
|
303
303
|
"backup.restore.safety": "Sicherheitsbackup: {name}. Überprüfe die aktuelle Konfiguration, bevor du dieses Sicherheitsbackup wiederherstellst, um den vorherigen Zustand wiederherzustellen.",
|
|
304
304
|
"backup.restore.reason.unsupported_form": "Home Assistant hat kein für diese Wiederherstellung geeignetes Formular bereitgestellt.",
|
|
305
305
|
"backup.restore.reason.unsupported_fields": "Einige Snapshot-Felder werden vom aktuellen Formular nicht akzeptiert.",
|
|
306
|
+
"backup.restore.reason.identity_changed": "Einige Snapshot-Felder werden von keinem Wiederherstellungsformular angeboten (sie werden bei der Erstellung festgelegt) und haben sich seit dem Backup geändert.",
|
|
306
307
|
"backup.restore.reason.validation_failed": "Home Assistant hat die wiederhergestellte Konfiguration als ungültig abgelehnt.",
|
|
307
308
|
"backup.restore.reason.flow_aborted": "Home Assistant hat den Wiederherstellungsvorgang abgebrochen.",
|
|
308
309
|
"backup.restore.fields": "Felder: {fields}",
|
{ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/locales/eo.json
RENAMED
|
@@ -303,6 +303,7 @@
|
|
|
303
303
|
"backup.restore.safety": "Sekureca sekurkopio: {name}. Inspektu la nunan agordon antaŭ restarigi ĉi tiun sekurecan sekurkopion por rekuperi la antaŭan staton.",
|
|
304
304
|
"backup.restore.reason.unsupported_form": "Home Assistant ne provizis taŭgan formularon por ĉi tiu restarigo.",
|
|
305
305
|
"backup.restore.reason.unsupported_fields": "Kelkaj kampoj de la momentfoto ne estas akceptitaj de la nuna formularo.",
|
|
306
|
+
"backup.restore.reason.identity_changed": "Iuj konservoskopaj kampoj ne estas ofertataj de iu ajn restaŭra formularo (ili estas agorditaj dum kreado), kaj ili ŝanĝiĝis ekde la sekurkopio.",
|
|
306
307
|
"backup.restore.reason.validation_failed": "Home Assistant malakceptis la restarigitan agordon kiel malvalidan.",
|
|
307
308
|
"backup.restore.reason.flow_aborted": "Home Assistant ĉesigis la restarigan fluon.",
|
|
308
309
|
"backup.restore.fields": "Kampoj: {fields}",
|
{ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/locales/es.json
RENAMED
|
@@ -303,6 +303,7 @@
|
|
|
303
303
|
"backup.restore.safety": "Copia de seguridad de seguridad: {name}. Inspecciona la configuración actual antes de restaurar esta copia para recuperar el estado anterior.",
|
|
304
304
|
"backup.restore.reason.unsupported_form": "Home Assistant no proporcionó un formulario adecuado para esta restauración.",
|
|
305
305
|
"backup.restore.reason.unsupported_fields": "El formulario actual no acepta algunos campos de la instantánea.",
|
|
306
|
+
"backup.restore.reason.identity_changed": "Algunos campos de la copia de seguridad no son ofrecidos por ningún formulario de restauración (se establecen en la creación) y han cambiado desde el respaldo.",
|
|
306
307
|
"backup.restore.reason.validation_failed": "Home Assistant rechazó la configuración restaurada por no ser válida.",
|
|
307
308
|
"backup.restore.reason.flow_aborted": "Home Assistant canceló el proceso de restauración.",
|
|
308
309
|
"backup.restore.fields": "Campos: {fields}",
|
{ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/locales/fr.json
RENAMED
|
@@ -303,6 +303,7 @@
|
|
|
303
303
|
"backup.restore.safety": "Sauvegarde de sécurité : {name}. Inspectez la configuration actuelle avant de restaurer cette sauvegarde de sécurité pour récupérer l'état précédent.",
|
|
304
304
|
"backup.restore.reason.unsupported_form": "Home Assistant n'a pas fourni de formulaire adapté à cette restauration.",
|
|
305
305
|
"backup.restore.reason.unsupported_fields": "Certains champs de l'instantané ne sont pas acceptés par le formulaire actuel.",
|
|
306
|
+
"backup.restore.reason.identity_changed": "Certains champs de l'instantané ne sont proposés par aucun formulaire de restauration (ils sont définis lors de la création) et ils ont changé depuis la sauvegarde.",
|
|
306
307
|
"backup.restore.reason.validation_failed": "Home Assistant a rejeté la configuration restaurée car elle n'est pas valide.",
|
|
307
308
|
"backup.restore.reason.flow_aborted": "Home Assistant a interrompu le processus de restauration.",
|
|
308
309
|
"backup.restore.fields": "Champs : {fields}",
|
{ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/locales/it.json
RENAMED
|
@@ -303,6 +303,7 @@
|
|
|
303
303
|
"backup.restore.safety": "Backup di sicurezza: {name}. Ispeziona la configurazione corrente prima di ripristinare questo backup di sicurezza per recuperare lo stato precedente.",
|
|
304
304
|
"backup.restore.reason.unsupported_form": "Home Assistant non ha fornito un modulo adatto per questo ripristino.",
|
|
305
305
|
"backup.restore.reason.unsupported_fields": "Alcuni campi dello snapshot non sono accettati dal modulo corrente.",
|
|
306
|
+
"backup.restore.reason.identity_changed": "Alcuni campi dello snapshot non sono offerti da alcun modulo di ripristino (vengono impostati alla creazione) e sono cambiati rispetto al backup.",
|
|
306
307
|
"backup.restore.reason.validation_failed": "Home Assistant ha rifiutato la configurazione ripristinata in quanto non valida.",
|
|
307
308
|
"backup.restore.reason.flow_aborted": "Home Assistant ha interrotto il flusso di ripristino.",
|
|
308
309
|
"backup.restore.fields": "Campi: {fields}",
|
{ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/locales/ko.json
RENAMED
|
@@ -303,6 +303,7 @@
|
|
|
303
303
|
"backup.restore.safety": "안전 백업: {name}. 이전 상태로 복구하기 위해 이 안전 백업을 복원하기 전에 현재 설정을 검토하세요.",
|
|
304
304
|
"backup.restore.reason.unsupported_form": "Home Assistant가 이 복원에 적합한 양식을 제공하지 않았습니다.",
|
|
305
305
|
"backup.restore.reason.unsupported_fields": "일부 스냅샷 필드가 현재 양식에서 허용되지 않습니다.",
|
|
306
|
+
"backup.restore.reason.identity_changed": "일부 스냅샷 필드는 복원 폼에서 제공되지 않으며(생성 시 설정됨) 백업 이후 변경되었습니다.",
|
|
306
307
|
"backup.restore.reason.validation_failed": "Home Assistant가 복원된 설정이 잘못되었다고 거부했습니다.",
|
|
307
308
|
"backup.restore.reason.flow_aborted": "Home Assistant가 복원 흐름을 중단했습니다.",
|
|
308
309
|
"backup.restore.fields": "필드: {fields}",
|
{ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/locales/nl.json
RENAMED
|
@@ -303,6 +303,7 @@
|
|
|
303
303
|
"backup.restore.safety": "Veiligheidsreservekopie: {name}. Inspecteer de huidige configuratie voordat je deze veiligheidsreservekopie terugzet om de vorige staat te herstellen.",
|
|
304
304
|
"backup.restore.reason.unsupported_form": "Home Assistant heeft geen formulier geleverd dat geschikt is voor deze terugzetting.",
|
|
305
305
|
"backup.restore.reason.unsupported_fields": "Sommige snapshotvelden worden niet geaccepteerd door het huidige formulier.",
|
|
306
|
+
"backup.restore.reason.identity_changed": "Sommige snapshotvelden worden door geen enkel herstelformulier aangeboden (deze worden ingesteld bij het aanmaken) en zijn gewijzigd sinds de backup.",
|
|
306
307
|
"backup.restore.reason.validation_failed": "Home Assistant heeft de teruggezette configuratie afgewezen als ongeldig.",
|
|
307
308
|
"backup.restore.reason.flow_aborted": "Home Assistant heeft het terugzetproces afgebroken.",
|
|
308
309
|
"backup.restore.fields": "Velden: {fields}",
|
{ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/locales/pl.json
RENAMED
|
@@ -303,6 +303,7 @@
|
|
|
303
303
|
"backup.restore.safety": "Kopia zapasowa zabezpieczająca: {name}. Sprawdź bieżącą konfigurację przed przywróceniem tej kopii zabezpieczającej, aby odzyskać poprzedni stan.",
|
|
304
304
|
"backup.restore.reason.unsupported_form": "Home Assistant nie udostępnił formularza odpowiedniego do tego przywracania.",
|
|
305
305
|
"backup.restore.reason.unsupported_fields": "Niektóre pola migawki nie są akceptowane przez bieżący formularz.",
|
|
306
|
+
"backup.restore.reason.identity_changed": "Niektóre pola kopii zapasowej nie są obsługiwane przez żaden formularz przywracania (są ustawiane podczas tworzenia) i uległy zmianie od czasu utworzenia kopii zapasowej.",
|
|
306
307
|
"backup.restore.reason.validation_failed": "Home Assistant odrzucił przywróconą konfigurację jako nieprawidłową.",
|
|
307
308
|
"backup.restore.reason.flow_aborted": "Home Assistant przerwał proces przywracania.",
|
|
308
309
|
"backup.restore.fields": "Pola: {fields}",
|
{ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/locales/ru.json
RENAMED
|
@@ -303,6 +303,7 @@
|
|
|
303
303
|
"backup.restore.safety": "Резервная копия безопасности: {name}. Проверьте текущую конфигурацию перед восстановлением этой резервной копии безопасности, чтобы вернуть предыдущее состояние.",
|
|
304
304
|
"backup.restore.reason.unsupported_form": "Home Assistant не предоставил форму, подходящую для этого восстановления.",
|
|
305
305
|
"backup.restore.reason.unsupported_fields": "Некоторые поля снимка не принимаются текущей формой.",
|
|
306
|
+
"backup.restore.reason.identity_changed": "Некоторые поля резервной копии не поддерживаются ни одной формой восстановления (они задаются при создании) и изменились с момента создания бэкапа.",
|
|
306
307
|
"backup.restore.reason.validation_failed": "Home Assistant отклонил восстановленную конфигурацию как недействительную.",
|
|
307
308
|
"backup.restore.reason.flow_aborted": "Home Assistant прервал процесс восстановления.",
|
|
308
309
|
"backup.restore.fields": "Поля: {fields}",
|
{ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/locales/sv.json
RENAMED
|
@@ -303,6 +303,7 @@
|
|
|
303
303
|
"backup.restore.safety": "Säkerhetskopia: {name}. Inspektera den aktuella konfigurationen innan du återställer denna säkerhetskopia för att återställa det föregående tillståndet.",
|
|
304
304
|
"backup.restore.reason.unsupported_form": "Home Assistant tillhandahöll inte ett formulär som passar för denna återställning.",
|
|
305
305
|
"backup.restore.reason.unsupported_fields": "Vissa fält i ögonblicksbilden accepteras inte av det aktuella formuläret.",
|
|
306
|
+
"backup.restore.reason.identity_changed": "Vissa fält i ögonblicksbilden erbjuds inte av någon återställningsformulär (de ställs in vid skapandet), och de har ändrats sedan säkerhetskopieringen.",
|
|
306
307
|
"backup.restore.reason.validation_failed": "Home Assistant avvisade den återställda konfigurationen som ogiltig.",
|
|
307
308
|
"backup.restore.reason.flow_aborted": "Home Assistant avbröt återställningsflödet.",
|
|
308
309
|
"backup.restore.fields": "Fält: {fields}",
|
{ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/locales/zh-Hans.json
RENAMED
|
@@ -303,6 +303,7 @@
|
|
|
303
303
|
"backup.restore.safety": "安全备份:{name}。在恢复此安全备份以恢复先前的状态之前,请检查当前配置。",
|
|
304
304
|
"backup.restore.reason.unsupported_form": "Home Assistant 未提供适合此恢复的表单。",
|
|
305
305
|
"backup.restore.reason.unsupported_fields": "当前表单不接受某些快照字段。",
|
|
306
|
+
"backup.restore.reason.identity_changed": "某些备份字段不由任何还原表单提供(它们在创建时设置),并且它们在备份后已更改。",
|
|
306
307
|
"backup.restore.reason.validation_failed": "Home Assistant 拒绝了恢复的配置,因为其无效。",
|
|
307
308
|
"backup.restore.reason.flow_aborted": "Home Assistant 中止了恢复流程。",
|
|
308
309
|
"backup.restore.fields": "字段:{fields}",
|
{ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/settings_ui/locales/zh-Hant.json
RENAMED
|
@@ -303,6 +303,7 @@
|
|
|
303
303
|
"backup.restore.safety": "安全備份:{name}。在還原此安全備份以恢復先前的狀態之前,請先檢查目前的設定。",
|
|
304
304
|
"backup.restore.reason.unsupported_form": "Home Assistant 未提供適合此還原的表單。",
|
|
305
305
|
"backup.restore.reason.unsupported_fields": "目前的表單不接受某些快照欄位。",
|
|
306
|
+
"backup.restore.reason.identity_changed": "某些快照欄位未由任何還原表單提供(它們是在建立時設定的),且自備份以來這些欄位已變更。",
|
|
306
307
|
"backup.restore.reason.validation_failed": "Home Assistant 拒絕已還原的設定,因為設定無效。",
|
|
307
308
|
"backup.restore.reason.flow_aborted": "Home Assistant 已中止還原流程。",
|
|
308
309
|
"backup.restore.fields": "欄位:{fields}",
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
"""Input-validation rejections for config writes (issue #2649).
|
|
2
|
+
|
|
3
|
+
Kept out of tools_config_automations.py so that file stays under its
|
|
4
|
+
module-size baseline. The helpers raise through ``raise_tool_error`` and
|
|
5
|
+
carry no client or Home Assistant dependency.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
from typing import Any
|
|
11
|
+
|
|
12
|
+
from ..errors import ErrorCode, create_error_response
|
|
13
|
+
from .helpers import raise_tool_error
|
|
14
|
+
|
|
15
|
+
# Guidance reused wherever the runtime-only ``enabled`` key folds into
|
|
16
|
+
# another rejection.
|
|
17
|
+
ENABLED_MISPLACED_GUIDANCE = (
|
|
18
|
+
"'enabled' is a runtime-only tool parameter, not a valid automation "
|
|
19
|
+
"config key — pass it to ha_config_set_automation as enabled=True/False "
|
|
20
|
+
"instead of putting it in config."
|
|
21
|
+
)
|
|
22
|
+
ENABLED_REMOVE_SUGGESTION = (
|
|
23
|
+
"Remove 'enabled' from config and pass enabled=True or False "
|
|
24
|
+
"to ha_config_set_automation"
|
|
25
|
+
)
|
|
26
|
+
ENABLED_UNCHANGED_SUGGESTION = (
|
|
27
|
+
"Use enabled=None to leave the current runtime state unchanged"
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def config_has_enabled(config: Any) -> bool:
|
|
32
|
+
"""Whether a config body carries the runtime-only ``enabled`` key."""
|
|
33
|
+
return isinstance(config, dict) and "enabled" in config
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def _missing_fields_shape(is_blueprint: bool) -> str:
|
|
37
|
+
"""One-line expected config shape with copy-pasteable quoted keys."""
|
|
38
|
+
if is_blueprint:
|
|
39
|
+
return (
|
|
40
|
+
"config={'alias': 'My Automation', 'use_blueprint': "
|
|
41
|
+
"{'path': 'light.yaml', 'input': {...}}}"
|
|
42
|
+
)
|
|
43
|
+
return "config={'alias': 'My Automation', 'triggers': [...], 'actions': [...]}"
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def _missing_field_guidance(
|
|
47
|
+
missing_fields: list[str], is_blueprint: bool, source: str
|
|
48
|
+
) -> tuple[str, list[str]]:
|
|
49
|
+
"""Message and suggestions for missing required fields, worded by source.
|
|
50
|
+
|
|
51
|
+
For the ``config`` argument the guidance points inside ``config``; for a
|
|
52
|
+
``python_transform`` the config came from a transform expression, so the
|
|
53
|
+
guidance points at the transform instead (telling it to send
|
|
54
|
+
``config={...}`` would earn a write-modes rejection).
|
|
55
|
+
"""
|
|
56
|
+
fields = ", ".join(missing_fields)
|
|
57
|
+
if source == "python_transform":
|
|
58
|
+
first = missing_fields[0]
|
|
59
|
+
return (
|
|
60
|
+
f"Missing required fields: {fields}. Add them in your "
|
|
61
|
+
f"python_transform expression, e.g. config['{first}'] = ... .",
|
|
62
|
+
[
|
|
63
|
+
"Set the missing field(s) on the transformed config, e.g. "
|
|
64
|
+
f"config['{first}'] = '...'."
|
|
65
|
+
],
|
|
66
|
+
)
|
|
67
|
+
shape = _missing_fields_shape(is_blueprint)
|
|
68
|
+
return (
|
|
69
|
+
f"Missing required fields: {fields}. Required automation fields go "
|
|
70
|
+
f"inside `config`, e.g. {shape}.",
|
|
71
|
+
[f"Add the missing field(s) inside the `config` argument: {shape}."],
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def reject_sequence_misroute(
|
|
76
|
+
config_dict: dict[str, Any],
|
|
77
|
+
missing_fields: list[str],
|
|
78
|
+
identifier: str | None,
|
|
79
|
+
source: str = "config",
|
|
80
|
+
) -> None:
|
|
81
|
+
"""Raise when a 'sequence' key shows the config is really a script.
|
|
82
|
+
|
|
83
|
+
Returns silently when the config does not look script-shaped, so the
|
|
84
|
+
caller stays a one-liner. A runtime-only ``enabled`` key folds into the
|
|
85
|
+
same rejection instead of costing another round trip.
|
|
86
|
+
"""
|
|
87
|
+
if not (
|
|
88
|
+
missing_fields
|
|
89
|
+
and "sequence" in config_dict
|
|
90
|
+
and ("triggers" in missing_fields or "actions" in missing_fields)
|
|
91
|
+
):
|
|
92
|
+
return
|
|
93
|
+
context: dict[str, Any] = {"missing_fields": missing_fields}
|
|
94
|
+
if identifier:
|
|
95
|
+
context["identifier"] = identifier
|
|
96
|
+
message = f"Missing required fields: {', '.join(missing_fields)}"
|
|
97
|
+
if source == "python_transform":
|
|
98
|
+
automation_fix = (
|
|
99
|
+
"In the python_transform expression, replace 'sequence' with "
|
|
100
|
+
"'actions' and add 'triggers'."
|
|
101
|
+
)
|
|
102
|
+
if "alias" in missing_fields:
|
|
103
|
+
automation_fix += (
|
|
104
|
+
" Set 'alias' in the expression too, e.g. config['alias'] = '...'."
|
|
105
|
+
)
|
|
106
|
+
else:
|
|
107
|
+
automation_fix = (
|
|
108
|
+
"For an automation, replace 'sequence' with 'actions' and add 'triggers'."
|
|
109
|
+
)
|
|
110
|
+
if "alias" in missing_fields:
|
|
111
|
+
automation_fix += (
|
|
112
|
+
" Put 'alias' inside `config` too, e.g. "
|
|
113
|
+
f"{_missing_fields_shape(is_blueprint=False)}."
|
|
114
|
+
)
|
|
115
|
+
suggestions = [
|
|
116
|
+
"Did you mean ha_config_set_script? Scripts use 'sequence' directly.",
|
|
117
|
+
automation_fix,
|
|
118
|
+
]
|
|
119
|
+
if config_has_enabled(config_dict):
|
|
120
|
+
context["invalid_key"] = "enabled"
|
|
121
|
+
message += f". {ENABLED_MISPLACED_GUIDANCE}"
|
|
122
|
+
suggestions.extend([ENABLED_REMOVE_SUGGESTION, ENABLED_UNCHANGED_SUGGESTION])
|
|
123
|
+
raise_tool_error(
|
|
124
|
+
create_error_response(
|
|
125
|
+
code=ErrorCode.CONFIG_MISSING_REQUIRED_FIELDS,
|
|
126
|
+
message=message,
|
|
127
|
+
details=(
|
|
128
|
+
"Config contains 'sequence', which belongs to scripts. "
|
|
129
|
+
"Automations use 'triggers' and 'actions'; scripts use 'sequence'."
|
|
130
|
+
),
|
|
131
|
+
suggestions=suggestions,
|
|
132
|
+
context=context,
|
|
133
|
+
)
|
|
134
|
+
)
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
def reject_invalid_config_inputs(
|
|
138
|
+
config_dict: dict[str, Any],
|
|
139
|
+
missing_fields: list[str],
|
|
140
|
+
identifier: str | None,
|
|
141
|
+
source: str = "config",
|
|
142
|
+
) -> None:
|
|
143
|
+
"""Raise the structured rejection for a config write's input violations.
|
|
144
|
+
|
|
145
|
+
A missing-field rejection says where the field goes and shows the
|
|
146
|
+
expected shape in one line; a runtime-only ``enabled`` key together with
|
|
147
|
+
missing required fields surfaces in ONE rejection instead of one round
|
|
148
|
+
trip each. Returns silently when the inputs are valid.
|
|
149
|
+
"""
|
|
150
|
+
enabled_in_config = config_has_enabled(config_dict)
|
|
151
|
+
if not missing_fields and not enabled_in_config:
|
|
152
|
+
return
|
|
153
|
+
context: dict[str, Any] = {}
|
|
154
|
+
if identifier:
|
|
155
|
+
context["identifier"] = identifier
|
|
156
|
+
if missing_fields:
|
|
157
|
+
context["missing_fields"] = missing_fields
|
|
158
|
+
message, suggestions = _missing_field_guidance(
|
|
159
|
+
missing_fields, "use_blueprint" in config_dict, source
|
|
160
|
+
)
|
|
161
|
+
if enabled_in_config:
|
|
162
|
+
context["invalid_key"] = "enabled"
|
|
163
|
+
message = f"{message} {ENABLED_MISPLACED_GUIDANCE}"
|
|
164
|
+
suggestions = suggestions + [
|
|
165
|
+
ENABLED_REMOVE_SUGGESTION,
|
|
166
|
+
ENABLED_UNCHANGED_SUGGESTION,
|
|
167
|
+
]
|
|
168
|
+
raise_tool_error(
|
|
169
|
+
create_error_response(
|
|
170
|
+
code=ErrorCode.CONFIG_MISSING_REQUIRED_FIELDS,
|
|
171
|
+
message=message,
|
|
172
|
+
details=f"Missing required fields: {', '.join(missing_fields)}",
|
|
173
|
+
suggestions=suggestions,
|
|
174
|
+
context=context or None,
|
|
175
|
+
)
|
|
176
|
+
)
|
|
177
|
+
raise_tool_error(
|
|
178
|
+
create_error_response(
|
|
179
|
+
ErrorCode.VALIDATION_INVALID_PARAMETER,
|
|
180
|
+
"'enabled' is a runtime-only tool parameter, not a valid "
|
|
181
|
+
"automation config key",
|
|
182
|
+
suggestions=[ENABLED_REMOVE_SUGGESTION, ENABLED_UNCHANGED_SUGGESTION],
|
|
183
|
+
context={"action": "set", "invalid_key": "enabled"},
|
|
184
|
+
)
|
|
185
|
+
)
|
{ha_mcp_dev-8.6.0.dev2934 → ha_mcp_dev-8.6.0.dev2941}/src/ha_mcp/tools/tools_config_automations.py
RENAMED
|
@@ -20,7 +20,6 @@ from ..client.rest_client import (
|
|
|
20
20
|
)
|
|
21
21
|
from ..errors import (
|
|
22
22
|
ErrorCode,
|
|
23
|
-
create_config_error,
|
|
24
23
|
create_error_response,
|
|
25
24
|
create_validation_error,
|
|
26
25
|
)
|
|
@@ -47,6 +46,10 @@ from .blueprint_substitute import (
|
|
|
47
46
|
from .coercion import JSON_STRING_COERCION, coerce_to_list, parse_json_param
|
|
48
47
|
from .component_config_reads import fetch_entity_lookup_via_component
|
|
49
48
|
from .config_helpers.registry import validate_registry_ids
|
|
49
|
+
from .config_write_errors import (
|
|
50
|
+
reject_invalid_config_inputs,
|
|
51
|
+
reject_sequence_misroute,
|
|
52
|
+
)
|
|
50
53
|
from .config_write_helpers import (
|
|
51
54
|
apply_entity_category,
|
|
52
55
|
attach_skill_content,
|
|
@@ -425,24 +428,6 @@ def _run_actions_once_reloaded(
|
|
|
425
428
|
_STANDALONE_RUNTIME_ACTIONS = ("set_enabled", "run_actions")
|
|
426
429
|
|
|
427
430
|
|
|
428
|
-
def _reject_enabled_in_config(config: Any) -> None:
|
|
429
|
-
"""Reject the runtime-only ``enabled`` key in a stored config body."""
|
|
430
|
-
if isinstance(config, dict) and "enabled" in config:
|
|
431
|
-
raise_tool_error(
|
|
432
|
-
create_error_response(
|
|
433
|
-
ErrorCode.VALIDATION_INVALID_PARAMETER,
|
|
434
|
-
"'enabled' is a runtime-only tool parameter, not a valid "
|
|
435
|
-
"automation config key",
|
|
436
|
-
suggestions=[
|
|
437
|
-
"Remove 'enabled' from config and pass enabled=True or False "
|
|
438
|
-
+ "to ha_config_set_automation",
|
|
439
|
-
"Use enabled=None to leave the current runtime state unchanged",
|
|
440
|
-
],
|
|
441
|
-
context={"action": "set", "invalid_key": "enabled"},
|
|
442
|
-
)
|
|
443
|
-
)
|
|
444
|
-
|
|
445
|
-
|
|
446
431
|
async def _set_automation_enabled(client: Any, entity_id: str, enabled: bool) -> Any:
|
|
447
432
|
"""Set an automation's runtime enabled state through Home Assistant."""
|
|
448
433
|
service = "turn_on" if enabled else "turn_off"
|
|
@@ -902,7 +887,6 @@ class AutomationConfigTools:
|
|
|
902
887
|
)
|
|
903
888
|
|
|
904
889
|
config_dict = self._parse_and_validate_config(config)
|
|
905
|
-
_reject_enabled_in_config(config_dict)
|
|
906
890
|
|
|
907
891
|
# Extract category before sending to HA REST API (which rejects unknown keys).
|
|
908
892
|
# Parameter takes precedence over config dict value.
|
|
@@ -917,6 +901,13 @@ class AutomationConfigTools:
|
|
|
917
901
|
# (trigger -> triggers, action -> actions, condition -> conditions).
|
|
918
902
|
config_dict = _normalize_automation_config(config_dict)
|
|
919
903
|
|
|
904
|
+
# Purely local input checks run before the tool's own reads, so
|
|
905
|
+
# a malformed config rejects without spending the hash check's
|
|
906
|
+
# or the alias guard's GETs. (The auto-backup wrapper may take
|
|
907
|
+
# its pre-write snapshot first on updates; that read is outside
|
|
908
|
+
# this tool's control.)
|
|
909
|
+
self._validate_required_fields(config_dict, identifier)
|
|
910
|
+
|
|
920
911
|
# Both the hash check and alias guard read the resolved storage key.
|
|
921
912
|
# Reuse it for the write to avoid a second entity-ID lookup (#1813).
|
|
922
913
|
# Creation and responses without an id retain the existing fallback.
|
|
@@ -930,7 +921,6 @@ class AutomationConfigTools:
|
|
|
930
921
|
identifier, config_dict
|
|
931
922
|
)
|
|
932
923
|
|
|
933
|
-
self._validate_required_fields(config_dict, identifier)
|
|
934
924
|
bp_warnings = _check_best_practices(config_dict)
|
|
935
925
|
validation_meta = await validate_config_references(
|
|
936
926
|
self._client, config_dict
|
|
@@ -1377,7 +1367,6 @@ class AutomationConfigTools:
|
|
|
1377
1367
|
source="python_transform",
|
|
1378
1368
|
)
|
|
1379
1369
|
# Pop category before sending to HA REST API (rejects unknown keys)
|
|
1380
|
-
_reject_enabled_in_config(transformed_config)
|
|
1381
1370
|
transform_category = transformed_config.pop("category", None)
|
|
1382
1371
|
effective_category = category if category is not None else transform_category
|
|
1383
1372
|
|
|
@@ -1387,7 +1376,9 @@ class AutomationConfigTools:
|
|
|
1387
1376
|
conflict_warnings = _detect_conflicting_root_keys(transformed_config)
|
|
1388
1377
|
|
|
1389
1378
|
transformed_config = _normalize_automation_config(transformed_config)
|
|
1390
|
-
self._validate_required_fields(
|
|
1379
|
+
self._validate_required_fields(
|
|
1380
|
+
transformed_config, identifier, source="python_transform"
|
|
1381
|
+
)
|
|
1391
1382
|
bp_warnings = _check_best_practices(transformed_config)
|
|
1392
1383
|
|
|
1393
1384
|
# Issue #2159: reject an unknown category before the write, so a
|
|
@@ -1848,9 +1839,13 @@ class AutomationConfigTools:
|
|
|
1848
1839
|
|
|
1849
1840
|
@staticmethod
|
|
1850
1841
|
def _validate_required_fields(
|
|
1851
|
-
config_dict: dict[str, Any], identifier: str | None
|
|
1842
|
+
config_dict: dict[str, Any], identifier: str | None, source: str = "config"
|
|
1852
1843
|
) -> None:
|
|
1853
|
-
"""Validate required fields and prevent duplicate creation.
|
|
1844
|
+
"""Validate required fields and prevent duplicate creation.
|
|
1845
|
+
|
|
1846
|
+
A missing required field and a misplaced runtime-only ``enabled`` key
|
|
1847
|
+
surface in ONE rejection (issue #2649).
|
|
1848
|
+
"""
|
|
1854
1849
|
if "use_blueprint" in config_dict:
|
|
1855
1850
|
required_fields = ["alias"]
|
|
1856
1851
|
# Strip empty triggers/actions/conditions arrays that would override blueprint
|
|
@@ -1861,38 +1856,8 @@ class AutomationConfigTools:
|
|
|
1861
1856
|
required_fields = ["alias", "triggers", "actions"]
|
|
1862
1857
|
|
|
1863
1858
|
missing_fields = [f for f in required_fields if f not in config_dict]
|
|
1864
|
-
|
|
1865
|
-
|
|
1866
|
-
# script — point them at ha_config_set_script instead of the generic
|
|
1867
|
-
# missing-fields error.
|
|
1868
|
-
if "sequence" in config_dict and (
|
|
1869
|
-
"triggers" in missing_fields or "actions" in missing_fields
|
|
1870
|
-
):
|
|
1871
|
-
context: dict[str, Any] = {"missing_fields": missing_fields}
|
|
1872
|
-
if identifier:
|
|
1873
|
-
context["identifier"] = identifier
|
|
1874
|
-
raise_tool_error(
|
|
1875
|
-
create_error_response(
|
|
1876
|
-
code=ErrorCode.CONFIG_MISSING_REQUIRED_FIELDS,
|
|
1877
|
-
message=f"Missing required fields: {', '.join(missing_fields)}",
|
|
1878
|
-
details=(
|
|
1879
|
-
"Config contains 'sequence', which belongs to scripts. "
|
|
1880
|
-
"Automations use 'triggers' and 'actions'; scripts use 'sequence'."
|
|
1881
|
-
),
|
|
1882
|
-
suggestions=[
|
|
1883
|
-
"Did you mean ha_config_set_script? Scripts use 'sequence' directly.",
|
|
1884
|
-
"For an automation, replace 'sequence' with 'actions' and add 'triggers'.",
|
|
1885
|
-
],
|
|
1886
|
-
context=context,
|
|
1887
|
-
)
|
|
1888
|
-
)
|
|
1889
|
-
raise_tool_error(
|
|
1890
|
-
create_config_error(
|
|
1891
|
-
f"Missing required fields: {', '.join(missing_fields)}",
|
|
1892
|
-
identifier=identifier,
|
|
1893
|
-
missing_fields=missing_fields,
|
|
1894
|
-
)
|
|
1895
|
-
)
|
|
1859
|
+
reject_sequence_misroute(config_dict, missing_fields, identifier, source)
|
|
1860
|
+
reject_invalid_config_inputs(config_dict, missing_fields, identifier, source)
|
|
1896
1861
|
|
|
1897
1862
|
# Issue #1169: see _check_scene_create_misroute
|
|
1898
1863
|
AutomationConfigTools._check_scene_create_misroute(config_dict, identifier)
|