ha-mcp-dev 9.0.0.dev3182__tar.gz → 9.0.0.dev3183__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/PKG-INFO +1 -1
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/pyproject.toml +1 -1
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/pyproject.toml.orig +1 -1
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/config_meta.py +1 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/config_settings.py +15 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/redaction.py +209 -31
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/settings_ui/locales/en.json +3 -1
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/settings_ui/settings.css +14 -7
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/settings_ui/settings_js/05_feature_flags.js +33 -37
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/tools_addons.py +10 -36
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/LICENSE +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/README.md +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/__main__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_pypi_marker +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_rich_compat.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev_security.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/client/mixins/skills.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/jev_search.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/mixins/extensions.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/skills/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/skills/_constants.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/skills/_resources.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/skills/_snapshot.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/skills/_source.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/skills/client.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/skills/extension.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/skills/models.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/shared/_request_clock.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/requirements.txt +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/client.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/server.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/websockets/version.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_version.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/app_discovery.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/auth/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/auth/consent_form.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/auth/iss_stamp.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/auth/oidc_compat.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/auth/provider.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/backup_dashboards.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/backup_diff.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/backup_entity_ids.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/backup_helper_target.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/backup_integrations.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/backup_manager.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/backup_tags.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/backup_zones.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/browser_landing.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/client/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/client/admin_routes.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/client/error_log_journald.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/client/models.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/client/rest_client.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/client/supervisor_client.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/client/websocket_client.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/client/websocket_listener.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/config.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/config_backup.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/config_overrides.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/config_registry.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/errors.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/ha_request_queue.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/hacs_auto_refresh.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/http_transport.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/image_info.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/llm_exposure.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/log_filters.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/policy/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/policy/approval_queue.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/policy/decision_pin.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/policy/decisions.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/policy/editing.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/policy/evaluator.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/policy/events.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/policy/handlers.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/policy/middleware.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/policy/model.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/policy/mrtr.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/policy/persistence.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/policy/server_channels.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/policy/value_sources.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/py.typed +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/read_only.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/renamed_tools.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-actions.md +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/triggers-and-conditions.md +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/server.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/server_instructions.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/server_lifespan.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/server_tool_text.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/settings_ui/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/settings_ui/_handlers_oauth_callbacks.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/settings_ui/_i18n.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/settings_ui/_persistence.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/settings_ui/_theme.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/settings_ui/locales/README.md +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/settings_ui/locales/az.json +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/settings_ui/locales/de.json +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/settings_ui/locales/es.json +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/settings_ui/locales/it.json +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/settings_ui/settings.html +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/settings_ui/settings_js/01_i18n_state.js +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/settings_ui/settings_js/02_tools_restart.js +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/settings_ui/settings_js/03_render_save.js +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/settings_ui/settings_js/04_backups.js +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/settings_ui/settings_js/06_policy_cards.js +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/settings_ui/settings_js/07_policy_actions.js +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/settings_ui/settings_js/08_advanced.js +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/settings_ui/settings_js/09_prefs_visibility.js +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/settings_ui/settings_js/10_oauth_callbacks.js +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/smoke_test.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/strict_bps.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tool_dispatch.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/addon_connection_hints.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/area_messages.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/auto_backup.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/backup.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/backup_access.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/backup_on_demand.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/best_practice_checker.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/best_practice_result.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/best_practice_variables.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/blueprint_sources.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/blueprint_write.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/bug_report_config.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/bug_report_templates.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/bulk_selector.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/coercion.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/component_api.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/component_config_entries.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/component_config_reads.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/component_devices.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/component_helper_collections.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/component_registries.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/config_entry_backup.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/config_entry_flow.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/config_entry_flow_introspect.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/config_entry_identity.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/config_helpers/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/config_helpers/core_payload.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/config_helpers/create.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/config_helpers/describe.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/config_helpers/flow.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/config_helpers/icon_route.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/config_helpers/listing.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/config_helpers/registry.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/config_helpers/schemas.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/config_helpers/typed_config.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/config_helpers/update.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/config_helpers/validation.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/config_subentry_restore.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/config_write_errors.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/config_write_helpers.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/core_contract.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/dashboard_card_describe.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/dashboard_list_checks.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/dev_backup.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/device_control.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/device_enrichment.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/diagnostics_helpers.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/energy_preferences.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/entity_param_parsing.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/entity_registration.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/entity_removal.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/entity_update_fields.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/error_log_parsing.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/flow_helper_lookup.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/hacs_registration.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/helper_flows.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/helpers.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/history_response.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/integration_entry_state.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/log_common.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/log_sources.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/log_sources_fault.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/log_sources_logbook.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/radio/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/radio/base.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/radio/matter.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/radio/thread.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/radio/zigbee.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/radio/zwave.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/radio/zwave_parameters.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/recorder_errors.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/reference_validator.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/registry.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/response_helpers.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/scene_discovery.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/search/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/search/base.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/search/component.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/search/entities.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/search/legacy.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/search/modes.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/search/overview.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/search/response.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/search/state.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/server_version.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/smart_search/_base.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/smart_search/_config.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/statistics_calendar.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/statistics_helpers.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/statistics_resets.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/system_restart.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/tool_hints.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/tools_areas.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/tools_blueprints.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/tools_bug_report.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/tools_calendar.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/tools_camera.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/tools_categories.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/tools_code.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/tools_config_automations.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/tools_dev.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/tools_energy.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/tools_entities.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/tools_filesystem.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/tools_groups.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/tools_hacs.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/tools_history.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/tools_integrations.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/tools_labels.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/tools_logs.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/tools_radio.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/tools_registry.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/tools_resources.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/tools_search.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/tools_security_policy.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/tools_service.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/tools_services.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/tools_system.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/tools_themes.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/tools_todo.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/tools_traces.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/tools_updates.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/tools_utility.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/tools_zones.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/util_helpers.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/validation_middleware.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/tools/ws_waiters.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/transforms/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/transforms/categorized_search.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/transforms/compact_params.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/transforms/component_helpers.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/transforms/component_search.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/transforms/write_tool_note.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/transport_security.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/update_check.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/utils/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/utils/config_hash.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/utils/config_write_lock.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/utils/dashboard_patch.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/utils/data_paths.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/utils/domain_handlers.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/utils/entity_membership.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/utils/fuzzy_search.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/utils/mcp_client_host.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/utils/operation_manager.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/utils/python_sandbox.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/utils/registry_update_lock.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/utils/skill_loader.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/utils/usage_logger.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/visibility/__init__.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/visibility/enforcement.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/visibility/model.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/visibility/persistence.py +0 -0
- {ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/visibility/resolver.py +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "uv_build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "ha-mcp-dev"
|
|
7
|
-
version = "9.0.0.
|
|
7
|
+
version = "9.0.0.dev3183"
|
|
8
8
|
description = "Home Assistant MCP Server - Complete control of Home Assistant through MCP"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.13,<3.15"
|
|
@@ -4,7 +4,7 @@ build-backend = "uv_build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "ha-mcp-dev"
|
|
7
|
-
version = "9.0.0.
|
|
7
|
+
version = "9.0.0.dev3183"
|
|
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
|
|
@@ -559,6 +559,21 @@ class Settings(BaseSettings):
|
|
|
559
559
|
Field(False, alias="REDACT_SECRETS")
|
|
560
560
|
)
|
|
561
561
|
|
|
562
|
+
# App option names to redact like ``format: password`` fields, for apps
|
|
563
|
+
# whose schema ships a secret as a plain string (#2843). Format: see
|
|
564
|
+
# ``redaction._listed_entries``. Consulted only while ``redact_secrets``
|
|
565
|
+
# is on; the UI nests it under that toggle. Restart-required because the
|
|
566
|
+
# app reads its options only at start, though other installs apply it live.
|
|
567
|
+
redact_app_option_keys: Annotated[
|
|
568
|
+
str,
|
|
569
|
+
Setting(
|
|
570
|
+
surface="advanced",
|
|
571
|
+
section="redact_keys",
|
|
572
|
+
app=_ALL_FLAVORS,
|
|
573
|
+
restart_required=True,
|
|
574
|
+
),
|
|
575
|
+
] = Field("", alias="REDACT_APP_OPTION_KEYS")
|
|
576
|
+
|
|
562
577
|
# Mandatory best-practice skills — server-side master switch for the
|
|
563
578
|
# write-tool skill_content delivery feature (issue #1182). When True
|
|
564
579
|
# (default), the six write tools (automations / scripts / scenes /
|
|
@@ -8,12 +8,14 @@ surfaces stop returning operator secrets verbatim:
|
|
|
8
8
|
proxy-mode 403 hints): every ``options`` value whose Supervisor-serialized
|
|
9
9
|
``schema`` entry carries ``format: "password"`` is replaced with a
|
|
10
10
|
set/empty sentinel. The schema is authoritative — keys without a schema
|
|
11
|
-
entry are never touched, and
|
|
11
|
+
entry are never touched, and option names are never guessed at. The only
|
|
12
|
+
name-based match is the operator's own ``redact_app_option_keys`` list;
|
|
13
|
+
listed options and PEM private-key values are treated as password fields.
|
|
12
14
|
2. **Integration options** (``ha_get_integration``): fields the
|
|
13
15
|
options-flow schema marks with a password text selector are replaced the
|
|
14
16
|
same way, on both the harvested options and the ``include_schema=True``
|
|
15
17
|
schema echo (whose ``suggested_value`` carries the live value).
|
|
16
|
-
3. **Every other tool response**:
|
|
18
|
+
3. **Every other tool response**: secret values seen while serving 1 and 2
|
|
17
19
|
are remembered in a process-local known-secrets set, and
|
|
18
20
|
:class:`RedactSecretsMiddleware` (registered just outside the
|
|
19
21
|
entity-visibility outbound scan, which stays innermost) scrubs any
|
|
@@ -162,63 +164,239 @@ def _iter_schema_entries(schema: Any) -> Iterable[dict[str, Any]]:
|
|
|
162
164
|
yield entry
|
|
163
165
|
|
|
164
166
|
|
|
165
|
-
def
|
|
166
|
-
"""
|
|
167
|
+
def _listed_entries() -> list[tuple[str, str]]:
|
|
168
|
+
"""``(scope, name)`` pairs from ``redact_app_option_keys`` (#2843).
|
|
167
169
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
through untouched. Non-dict ``options`` are returned as-is.
|
|
170
|
+
Entries are separated by commas or newlines. ``name`` applies to every
|
|
171
|
+
app (scope ``""``); ``<slug>:<name>`` to one app.
|
|
171
172
|
"""
|
|
173
|
+
entries: list[tuple[str, str]] = []
|
|
174
|
+
for entry in re.split(r"[,\n]", get_global_settings().redact_app_option_keys):
|
|
175
|
+
scope, _sep, name = (part.strip() for part in entry.rpartition(":"))
|
|
176
|
+
if name:
|
|
177
|
+
entries.append((scope, name))
|
|
178
|
+
return entries
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
def _scope_matches(scope: str, slug: str) -> bool:
|
|
182
|
+
# A store app's slug carries its repository's prefix (``cebe7a76_...``,
|
|
183
|
+
# ``core_...``), which the app's own docs and repository leave out, so
|
|
184
|
+
# the unprefixed slug names the app too.
|
|
185
|
+
return scope == slug or scope == slug.partition("_")[2]
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
def _operator_listed_option_keys(slug: str) -> frozenset[str]:
|
|
189
|
+
return frozenset(
|
|
190
|
+
name
|
|
191
|
+
for scope, name in _listed_entries()
|
|
192
|
+
if not scope or _scope_matches(scope, slug)
|
|
193
|
+
)
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
def _schema_names(schema: Any) -> set[str]:
|
|
197
|
+
names: set[str] = set()
|
|
198
|
+
for entry in _iter_schema_entries(schema):
|
|
199
|
+
names.add(entry["name"])
|
|
200
|
+
names |= _schema_names(entry.get("schema"))
|
|
201
|
+
return names
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
def _option_names(options: Any) -> set[str]:
|
|
205
|
+
names: set[str] = set()
|
|
206
|
+
items = options if isinstance(options, list) else [options]
|
|
207
|
+
for item in items:
|
|
208
|
+
if isinstance(item, dict):
|
|
209
|
+
for name, value in item.items():
|
|
210
|
+
names.add(name)
|
|
211
|
+
names |= _option_names(value)
|
|
212
|
+
return names
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
def _is_secret_option(
|
|
216
|
+
entry: dict[str, Any], value: Any, listed: frozenset[str]
|
|
217
|
+
) -> bool:
|
|
218
|
+
return (
|
|
219
|
+
entry.get("format") == "password"
|
|
220
|
+
or entry["name"] in listed
|
|
221
|
+
or contains_pem_private_key(value)
|
|
222
|
+
)
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
def redact_addon_info(
|
|
226
|
+
addon: dict[str, Any], slug: str
|
|
227
|
+
) -> tuple[dict[str, Any], list[str]]:
|
|
228
|
+
"""Redacted copy of a Supervisor ``/addons/<slug>/info`` result, and warnings.
|
|
229
|
+
|
|
230
|
+
Registers the app's secret values for the known-value scrub. Without a
|
|
231
|
+
readable schema the password fields cannot be told apart, so every option
|
|
232
|
+
value is redacted, like the integration surface does.
|
|
233
|
+
"""
|
|
234
|
+
options = addon.get("options")
|
|
235
|
+
schema = addon.get("schema")
|
|
236
|
+
if not isinstance(options, dict) or not options:
|
|
237
|
+
return addon, []
|
|
238
|
+
listed = _operator_listed_option_keys(slug)
|
|
239
|
+
if not isinstance(schema, list) or not schema:
|
|
240
|
+
# Every value is masked here, but only listed ones are known secrets
|
|
241
|
+
# worth scrubbing from other responses.
|
|
242
|
+
register_known_secret_values(_collect_stored(options, listed, False))
|
|
243
|
+
redacted = {key: sentinel_replacement(value) for key, value in options.items()}
|
|
244
|
+
return {**addon, "options": redacted}, [
|
|
245
|
+
f"redact_secrets: no options schema readable for '{slug}' — "
|
|
246
|
+
"every option value was redacted conservatively (the "
|
|
247
|
+
"password fields cannot be told apart without the schema)"
|
|
248
|
+
]
|
|
249
|
+
register_known_secret_values(_collect_addon_secret_values(options, schema, listed))
|
|
250
|
+
unknown = sorted(
|
|
251
|
+
{
|
|
252
|
+
name
|
|
253
|
+
for scope, name in _listed_entries()
|
|
254
|
+
if scope and _scope_matches(scope, slug)
|
|
255
|
+
}
|
|
256
|
+
- _schema_names(schema)
|
|
257
|
+
- _option_names(options)
|
|
258
|
+
)
|
|
259
|
+
warnings = (
|
|
260
|
+
[
|
|
261
|
+
f"redact_app_option_keys names {', '.join(unknown)} for '{slug}', "
|
|
262
|
+
"but this app has no such option, so nothing was redacted for them"
|
|
263
|
+
]
|
|
264
|
+
if unknown
|
|
265
|
+
else []
|
|
266
|
+
)
|
|
267
|
+
redacted = _redact_addon_options(options, schema, listed)
|
|
268
|
+
return {**addon, "options": redacted}, warnings
|
|
269
|
+
|
|
270
|
+
|
|
271
|
+
def redact_addon_options(options: Any, schema: Any, slug: str) -> Any:
|
|
272
|
+
"""Copy of ``options`` with secret values sentinel-replaced.
|
|
273
|
+
|
|
274
|
+
A value is secret when its schema entry carries ``format: password``, its
|
|
275
|
+
name (or the name of a group containing it) is listed for ``slug`` in
|
|
276
|
+
``redact_app_option_keys``, or it holds a PEM private key. Listed names
|
|
277
|
+
are also redacted in values Supervisor kept after an app update dropped
|
|
278
|
+
the option or changed it between a group and a plain field, keeping the
|
|
279
|
+
stored shape around them. Walks nested option groups recursively (a
|
|
280
|
+
group's value may be a dict or, with ``multiple``, a list of dicts).
|
|
281
|
+
Other keys without a schema entry pass through untouched. Non-dict
|
|
282
|
+
``options`` are returned as-is.
|
|
283
|
+
"""
|
|
284
|
+
return _redact_addon_options(options, schema, _operator_listed_option_keys(slug))
|
|
285
|
+
|
|
286
|
+
|
|
287
|
+
def _redact_addon_options(
|
|
288
|
+
options: Any, schema: Any, listed: frozenset[str], whole: bool = False
|
|
289
|
+
) -> Any:
|
|
290
|
+
"""``whole``: the options sit inside a listed group, so all are secret."""
|
|
172
291
|
if not isinstance(options, dict):
|
|
173
292
|
return options
|
|
174
293
|
out = dict(options)
|
|
294
|
+
known: set[str] = set()
|
|
175
295
|
for entry in _iter_schema_entries(schema):
|
|
176
296
|
name = entry["name"]
|
|
297
|
+
known.add(name)
|
|
177
298
|
if name not in out:
|
|
178
299
|
continue
|
|
179
300
|
value = out[name]
|
|
180
301
|
nested = entry.get("schema")
|
|
302
|
+
secret = whole or name in listed
|
|
303
|
+
# A manual app update can turn a field into a group or back without
|
|
304
|
+
# Supervisor converting the stored value, so a mismatched value is
|
|
305
|
+
# walked like a stored option the schema no longer describes.
|
|
181
306
|
if isinstance(nested, list):
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
elif isinstance(value, list):
|
|
185
|
-
out[name] = [
|
|
186
|
-
redact_addon_options(item, nested)
|
|
187
|
-
if isinstance(item, dict)
|
|
188
|
-
else item
|
|
189
|
-
for item in value
|
|
190
|
-
]
|
|
191
|
-
continue
|
|
192
|
-
if entry.get("format") == "password" or contains_pem_private_key(value):
|
|
307
|
+
out[name] = _redact_group(value, nested, listed, secret)
|
|
308
|
+
elif secret or _is_secret_option(entry, value, listed):
|
|
193
309
|
# multiple: true passwords are a list — sentinel_replacement
|
|
194
310
|
# keeps the container shape so the option's type survives.
|
|
195
311
|
out[name] = sentinel_replacement(value)
|
|
312
|
+
elif isinstance(value, (dict, list)):
|
|
313
|
+
out[name] = _redact_stored(value, listed, False)
|
|
314
|
+
for name in out.keys() - known:
|
|
315
|
+
out[name] = _redact_stored(out[name], listed, whole or name in listed)
|
|
196
316
|
return out
|
|
197
317
|
|
|
198
318
|
|
|
199
|
-
def
|
|
200
|
-
|
|
319
|
+
def _redact_group(
|
|
320
|
+
value: Any, schema: list[Any], listed: frozenset[str], secret: bool
|
|
321
|
+
) -> Any:
|
|
322
|
+
if isinstance(value, dict):
|
|
323
|
+
return _redact_addon_options(value, schema, listed, secret)
|
|
324
|
+
if isinstance(value, list):
|
|
325
|
+
return [
|
|
326
|
+
_redact_addon_options(item, schema, listed, secret)
|
|
327
|
+
if isinstance(item, dict)
|
|
328
|
+
else _redact_stored(item, listed, secret)
|
|
329
|
+
for item in value
|
|
330
|
+
]
|
|
331
|
+
return value if value is None else _redact_stored(value, listed, secret)
|
|
332
|
+
|
|
333
|
+
|
|
334
|
+
def _redact_stored(value: Any, listed: frozenset[str], secret: bool) -> Any:
|
|
335
|
+
"""Redact a stored option the schema no longer describes.
|
|
336
|
+
|
|
337
|
+
Supervisor keeps an option's saved value after an app update drops it
|
|
338
|
+
from the schema or changes its type, so a listed secret can outlive its
|
|
339
|
+
schema entry. Only the listed names can be matched here; the shape is
|
|
340
|
+
kept.
|
|
341
|
+
"""
|
|
342
|
+
if isinstance(value, dict):
|
|
343
|
+
return {
|
|
344
|
+
key: _redact_stored(item, listed, secret or key in listed)
|
|
345
|
+
for key, item in value.items()
|
|
346
|
+
}
|
|
347
|
+
if isinstance(value, list):
|
|
348
|
+
return [_redact_stored(item, listed, secret) for item in value]
|
|
349
|
+
return sentinel_replacement(value) if secret else value
|
|
350
|
+
|
|
351
|
+
|
|
352
|
+
def collect_addon_secret_values(options: Any, schema: Any, slug: str) -> set[str]:
|
|
353
|
+
"""Live secret option values (see ``redact_addon_options``), for the scrub."""
|
|
354
|
+
return _collect_addon_secret_values(
|
|
355
|
+
options, schema, _operator_listed_option_keys(slug)
|
|
356
|
+
)
|
|
357
|
+
|
|
358
|
+
|
|
359
|
+
def _collect_addon_secret_values(
|
|
360
|
+
options: Any, schema: Any, listed: frozenset[str], whole: bool = False
|
|
361
|
+
) -> set[str]:
|
|
201
362
|
values: set[str] = set()
|
|
202
363
|
if not isinstance(options, dict):
|
|
203
364
|
return values
|
|
365
|
+
known: set[str] = set()
|
|
204
366
|
for entry in _iter_schema_entries(schema):
|
|
205
|
-
|
|
367
|
+
name = entry["name"]
|
|
368
|
+
known.add(name)
|
|
369
|
+
value = options.get(name)
|
|
206
370
|
nested = entry.get("schema")
|
|
371
|
+
secret = whole or name in listed
|
|
207
372
|
if isinstance(nested, list):
|
|
208
|
-
if isinstance(value,
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
373
|
+
items = value if isinstance(value, list) else [value]
|
|
374
|
+
for item in items:
|
|
375
|
+
if isinstance(item, dict):
|
|
376
|
+
values |= _collect_addon_secret_values(item, nested, listed, secret)
|
|
377
|
+
else:
|
|
378
|
+
values |= _collect_stored(item, listed, secret)
|
|
214
379
|
continue
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
380
|
+
values |= _collect_stored(
|
|
381
|
+
value, listed, secret or _is_secret_option(entry, value, listed)
|
|
382
|
+
)
|
|
383
|
+
for name in options.keys() - known:
|
|
384
|
+
values |= _collect_stored(options[name], listed, whole or name in listed)
|
|
219
385
|
return values
|
|
220
386
|
|
|
221
387
|
|
|
388
|
+
def _collect_stored(value: Any, listed: frozenset[str], secret: bool) -> set[str]:
|
|
389
|
+
"""Known-value strings of a stored option (see ``_redact_stored``)."""
|
|
390
|
+
if isinstance(value, dict):
|
|
391
|
+
values: set[str] = set()
|
|
392
|
+
for key, item in value.items():
|
|
393
|
+
values |= _collect_stored(item, listed, secret or key in listed)
|
|
394
|
+
return values
|
|
395
|
+
if isinstance(value, list):
|
|
396
|
+
return set().union(*(_collect_stored(item, listed, secret) for item in value))
|
|
397
|
+
return known_values_for_option_item(value) if secret else set()
|
|
398
|
+
|
|
399
|
+
|
|
222
400
|
def sentinel_option_keys(options: Any, _prefix: str = "") -> list[str]:
|
|
223
401
|
"""Dotted paths of submitted option values that equal a redaction sentinel.
|
|
224
402
|
|
{ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/settings_ui/locales/en.json
RENAMED
|
@@ -138,7 +138,7 @@
|
|
|
138
138
|
"features.read_only_mode.label": "Read Only Mode",
|
|
139
139
|
"features.read_only_mode.help": "Toggles all write tools off, and removes ability for tools to make any write or destructive calls. Mixed read/write tools — backups, Apps (add-ons), energy preferences, voice pipelines, and code mode when enabled — stay available with their write operations blocked. Same toggle as the web UI Tools tab. Off by default. Requires restart to take effect.",
|
|
140
140
|
"features.redact_secrets.label": "Redact Secrets",
|
|
141
|
-
"features.redact_secrets.help": "Redacts secrets from tool responses before they reach the AI assistant. App (add-on) options and integration fields marked as passwords are replaced with a set/empty marker (so \"is this credential configured?\" stays answerable), and other tool responses are scrubbed of secret values the server has already seen (values shorter than 6 characters are skipped, since replacing tiny fragments would corrupt unrelated output).
|
|
141
|
+
"features.redact_secrets.help": "Redacts secrets from tool responses before they reach the AI assistant. App (add-on) options and integration fields marked as passwords are replaced with a set/empty marker (so \"is this credential configured?\" stays answerable), and other tool responses are scrubbed of secret values the server has already seen (values shorter than 6 characters are skipped, since replacing tiny fragments would corrupt unrelated output). Other fields are not detected, except private keys in app options and the app option names listed below. Off by default.",
|
|
142
142
|
"features.enable_mandatory_bps.label": "Attach best-practice skills on writes",
|
|
143
143
|
"features.enable_mandatory_bps.help": "Master switch for the write-tool skill content delivery feature (issue #1182). When enabled (default), the six config write tools (automations, scripts, scenes, helpers, dashboards, raw YAML) attach the canonical Home Assistant best-practice reference files under `skill_content` on every successful write, plus auto-embed any reference sections cited by best-practice warnings. Each tool also exposes a per-call `MandatoryBPS` parameter the agent can set to false on subsequent calls once it has the content. When this master switch is off, NO skill_content goes out regardless of the per-call parameter or BP warnings. Recommended ON as the first choice; disable only for models with very small context windows. Turning this off may degrade write accuracy. Requires restart to take effect.",
|
|
144
144
|
"features.enable_strict_mandatory_bps.label": "Strict best-practices mode",
|
|
@@ -516,6 +516,8 @@
|
|
|
516
516
|
"advanced.code_mode_saved_tools_path.help": "JSON file used to persist custom tools across restarts.",
|
|
517
517
|
"advanced.extra_yaml_write_keys.label": "Extra YAML write keys",
|
|
518
518
|
"advanced.extra_yaml_write_keys.help": "Extra top-level keys ha_config_set_yaml may write in addition to the built-in ones, for YAML-first integrations on this install (e.g. alert2). Enter one key per line or separate keys with commas. Keys that redefine Home Assistant's own trust boundary can never be added and are ignored. Requires custom component 1.2.4 or newer.",
|
|
519
|
+
"advanced.redact_app_option_keys.label": "Extra app option keys to redact",
|
|
520
|
+
"advanced.redact_app_option_keys.help": "App (add-on) option names to redact like password fields, for apps whose schema stores a secret as plain text (for example backup_password). Separate names with commas or new lines. A name applies to every app; write app_slug:name to limit it to one app. Naming an option group covers every option in it. Used only while Redact Secrets is on. Empty by default.",
|
|
519
521
|
"advanced.sidecar_pin_port.label": "Settings UI sidecar port",
|
|
520
522
|
"advanced.sidecar_pin_port.help": "0 picks a free port on first start and keeps it for later restarts; a port in the range pins a preferred port (falls back to a free one if taken).",
|
|
521
523
|
"advanced.enable_dev_mode.label": "Developer mode",
|
|
@@ -511,28 +511,35 @@
|
|
|
511
511
|
.feature-row.beta-sub,
|
|
512
512
|
.feature-row.codemode-sub,
|
|
513
513
|
.feature-row.yaml-packages-sub,
|
|
514
|
-
.feature-row.mandatory-bps-sub
|
|
514
|
+
.feature-row.mandatory-bps-sub,
|
|
515
|
+
.feature-row.redact-sub { position: relative; }
|
|
515
516
|
.feature-row.beta-sub::before,
|
|
516
517
|
.feature-row.codemode-sub::before,
|
|
517
518
|
.feature-row.yaml-packages-sub::before,
|
|
518
|
-
.feature-row.mandatory-bps-sub::before
|
|
519
|
+
.feature-row.mandatory-bps-sub::before,
|
|
520
|
+
.feature-row.redact-sub::before {
|
|
519
521
|
content: ""; position: absolute; top: 0; bottom: 0; width: 2px; background: var(--border);
|
|
520
522
|
}
|
|
521
523
|
.feature-row.beta-sub.dimmed,
|
|
522
524
|
.feature-row.codemode-sub.dimmed,
|
|
523
525
|
.feature-row.yaml-packages-sub.dimmed,
|
|
524
|
-
.feature-row.mandatory-bps-sub.dimmed
|
|
526
|
+
.feature-row.mandatory-bps-sub.dimmed,
|
|
527
|
+
.feature-row.redact-sub.dimmed { opacity: 0.38; }
|
|
525
528
|
.feature-row.beta-sub.dimmed input,
|
|
526
529
|
.feature-row.codemode-sub.dimmed input,
|
|
527
530
|
.feature-row.yaml-packages-sub.dimmed input,
|
|
528
|
-
.feature-row.mandatory-bps-sub.dimmed input
|
|
531
|
+
.feature-row.mandatory-bps-sub.dimmed input,
|
|
532
|
+
.feature-row.redact-sub.dimmed input { cursor: not-allowed; }
|
|
529
533
|
|
|
530
534
|
/* Depth 1 — nested directly under a top-level toggle (beta-sub under the
|
|
531
|
-
master; strict-mode under the non-beta enable_mandatory_bps row
|
|
535
|
+
master; strict-mode under the non-beta enable_mandatory_bps row; extra
|
|
536
|
+
redacted app option keys under redact_secrets). */
|
|
532
537
|
.feature-row.beta-sub,
|
|
533
|
-
.feature-row.mandatory-bps-sub
|
|
538
|
+
.feature-row.mandatory-bps-sub,
|
|
539
|
+
.feature-row.redact-sub { padding-left: 32px; }
|
|
534
540
|
.feature-row.beta-sub::before,
|
|
535
|
-
.feature-row.mandatory-bps-sub::before
|
|
541
|
+
.feature-row.mandatory-bps-sub::before,
|
|
542
|
+
.feature-row.redact-sub::before { left: 12px; }
|
|
536
543
|
|
|
537
544
|
/* Depth 2 — nested under a beta-sub parent (yaml packages under
|
|
538
545
|
enable_yaml_config_editing; code-mode numerics under enable_code_mode). */
|
|
@@ -25,7 +25,7 @@ const FEATURE_META = {
|
|
|
25
25
|
},
|
|
26
26
|
redact_secrets: {
|
|
27
27
|
label: "Redact Secrets",
|
|
28
|
-
help: "Redacts secrets from tool responses before they reach the AI assistant. App (add-on) options and integration fields marked as passwords are replaced with a set/empty marker (so \"is this credential configured?\" stays answerable), and other tool responses are scrubbed of secret values the server has already seen (values shorter than 6 characters are skipped, since replacing tiny fragments would corrupt unrelated output).
|
|
28
|
+
help: "Redacts secrets from tool responses before they reach the AI assistant. App (add-on) options and integration fields marked as passwords are replaced with a set/empty marker (so \"is this credential configured?\" stays answerable), and other tool responses are scrubbed of secret values the server has already seen (values shorter than 6 characters are skipped, since replacing tiny fragments would corrupt unrelated output). Other fields are not detected, except private keys in app options and the app option names listed below. Off by default.",
|
|
29
29
|
},
|
|
30
30
|
enable_mandatory_bps: {
|
|
31
31
|
label: "Attach best-practice skills on writes",
|
|
@@ -107,6 +107,18 @@ const MANDATORY_BPS_SUB_FLAGS = [
|
|
|
107
107
|
'enable_strict_mandatory_bps',
|
|
108
108
|
];
|
|
109
109
|
|
|
110
|
+
// Non-master toggles with rows nested under them; flipping one re-renders
|
|
111
|
+
// the panel so those rows dim or undim at once.
|
|
112
|
+
const PARENTS_WITH_SUB_ROWS = new Set([
|
|
113
|
+
'enable_yaml_config_editing',
|
|
114
|
+
'enable_mandatory_bps',
|
|
115
|
+
'redact_secrets',
|
|
116
|
+
]);
|
|
117
|
+
|
|
118
|
+
// Advanced text settings edited as a one-per-line list and saved
|
|
119
|
+
// comma-joined.
|
|
120
|
+
const LIST_EDITOR_FIELDS = new Set(['extra_yaml_write_keys', 'redact_app_option_keys']);
|
|
121
|
+
|
|
110
122
|
// Cached add-on flag. Each settings endpoint (/api/settings/features,
|
|
111
123
|
// /api/settings/advanced, /api/settings/backup-config) returns
|
|
112
124
|
// ``is_addon`` so the env-locked banner copy can adapt — the addon
|
|
@@ -284,40 +296,18 @@ function renderFeatureFlags(flags) {
|
|
|
284
296
|
// master off then back on restores the user's prior sub-flag
|
|
285
297
|
// selections automatically, which is the intended UX for an
|
|
286
298
|
// opt-in beta surface.
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
// the panel re-renders synchronously while the save POST runs
|
|
300
|
-
// in the background.
|
|
301
|
-
if (fieldName === 'enable_yaml_config_editing') {
|
|
302
|
-
if (_lastFeatureFlags[fieldName]) {
|
|
303
|
-
_lastFeatureFlags[fieldName] = {
|
|
304
|
-
..._lastFeatureFlags[fieldName],
|
|
305
|
-
value: input.checked,
|
|
306
|
-
};
|
|
307
|
-
renderFeatureFlags(_lastFeatureFlags);
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
// Re-render on enable_mandatory_bps flip so the strict-mode
|
|
311
|
-
// sub-row dims/undims immediately. Same live-cache pattern as
|
|
312
|
-
// the master and yaml-config flips above.
|
|
313
|
-
if (fieldName === 'enable_mandatory_bps') {
|
|
314
|
-
if (_lastFeatureFlags[fieldName]) {
|
|
315
|
-
_lastFeatureFlags[fieldName] = {
|
|
316
|
-
..._lastFeatureFlags[fieldName],
|
|
317
|
-
value: input.checked,
|
|
318
|
-
};
|
|
319
|
-
renderFeatureFlags(_lastFeatureFlags);
|
|
320
|
-
}
|
|
299
|
+
//
|
|
300
|
+
// The other parents with nested rows re-render the same way, so
|
|
301
|
+
// their sub-rows dim/undim immediately.
|
|
302
|
+
if (
|
|
303
|
+
(isMaster || PARENTS_WITH_SUB_ROWS.has(fieldName)) &&
|
|
304
|
+
_lastFeatureFlags[fieldName]
|
|
305
|
+
) {
|
|
306
|
+
_lastFeatureFlags[fieldName] = {
|
|
307
|
+
..._lastFeatureFlags[fieldName],
|
|
308
|
+
value: input.checked,
|
|
309
|
+
};
|
|
310
|
+
renderFeatureFlags(_lastFeatureFlags);
|
|
321
311
|
}
|
|
322
312
|
saveFeatureFlag(fieldName, input.checked);
|
|
323
313
|
});
|
|
@@ -385,6 +375,11 @@ function renderFeatureFlags(flags) {
|
|
|
385
375
|
lockedByGate: !parentOn,
|
|
386
376
|
});
|
|
387
377
|
}
|
|
378
|
+
// Extra app option keys to redact (#2843), nested under redact_secrets
|
|
379
|
+
// and dimmed while it is off.
|
|
380
|
+
if (fieldName === 'redact_secrets') {
|
|
381
|
+
renderAdvancedSubRows(targetBody, 'redact_keys', 'redact-sub', !f.value);
|
|
382
|
+
}
|
|
388
383
|
// After the enable_filesystem_tools row, inject the custom-directories
|
|
389
384
|
// editor (issue #1567). Dimmed when either the master beta is off or
|
|
390
385
|
// filesystem tools itself is off. The list is component-owned and fetched
|
|
@@ -473,7 +468,8 @@ function renderSubFlagRows(flags, parentEl, subFieldNames, { cssClass, lockedByG
|
|
|
473
468
|
|
|
474
469
|
// Shared renderer for non-bool sub-rows that live in ADVANCED_SETTINGS_FIELDS
|
|
475
470
|
// but render nested under a feature toggle (code-mode numerics under
|
|
476
|
-
// enable_code_mode, extra YAML write keys under enable_yaml_config_editing
|
|
471
|
+
// enable_code_mode, extra YAML write keys under enable_yaml_config_editing,
|
|
472
|
+
// extra redacted app option keys under redact_secrets).
|
|
477
473
|
// They save through commitAdvancedEdit rather than saveFeatureFlag, which is
|
|
478
474
|
// why renderSubFlagRows (checkbox-only) cannot serve them.
|
|
479
475
|
function renderAdvancedSubRows(parentEl, section, cssClass, lockedByGate) {
|
|
@@ -482,7 +478,7 @@ function renderAdvancedSubRows(parentEl, section, cssClass, lockedByGate) {
|
|
|
482
478
|
const meta = localizeMeta('advanced', f.field, {});
|
|
483
479
|
const row = document.createElement('div');
|
|
484
480
|
row.className = 'feature-row ' + cssClass + (lockedByGate ? ' dimmed' : '');
|
|
485
|
-
const multiline = f.field
|
|
481
|
+
const multiline = LIST_EDITOR_FIELDS.has(f.field);
|
|
486
482
|
if (multiline) row.classList.add('list-editor');
|
|
487
483
|
|
|
488
484
|
const info = document.createElement('div');
|
|
@@ -42,11 +42,10 @@ from ..errors import (
|
|
|
42
42
|
)
|
|
43
43
|
from ..redaction import (
|
|
44
44
|
collect_addon_secret_values,
|
|
45
|
-
|
|
45
|
+
redact_addon_info,
|
|
46
46
|
redaction_enabled,
|
|
47
47
|
register_known_secret_values,
|
|
48
48
|
sentinel_option_keys,
|
|
49
|
-
sentinel_replacement,
|
|
50
49
|
)
|
|
51
50
|
from ..utils.python_sandbox import (
|
|
52
51
|
PythonSandboxError,
|
|
@@ -997,34 +996,9 @@ async def get_addon_info(client: HomeAssistantClient, slug: str) -> dict[str, An
|
|
|
997
996
|
result: dict[str, Any] = {"success": True, "addon": addon}
|
|
998
997
|
|
|
999
998
|
if redaction_enabled():
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
if isinstance(schema, list) and schema:
|
|
1004
|
-
register_known_secret_values(
|
|
1005
|
-
collect_addon_secret_values(options, schema)
|
|
1006
|
-
)
|
|
1007
|
-
result["addon"] = {
|
|
1008
|
-
**addon,
|
|
1009
|
-
"options": redact_addon_options(options, schema),
|
|
1010
|
-
}
|
|
1011
|
-
else:
|
|
1012
|
-
# No readable schema (absent, malformed, or empty) — the
|
|
1013
|
-
# password fields cannot be told apart, so fail closed like
|
|
1014
|
-
# the integration surface does rather than passing raw
|
|
1015
|
-
# options through.
|
|
1016
|
-
result["addon"] = {
|
|
1017
|
-
**addon,
|
|
1018
|
-
"options": {
|
|
1019
|
-
key: sentinel_replacement(value)
|
|
1020
|
-
for key, value in options.items()
|
|
1021
|
-
},
|
|
1022
|
-
}
|
|
1023
|
-
result.setdefault("warnings", []).append(
|
|
1024
|
-
f"redact_secrets: no options schema readable for '{slug}' — "
|
|
1025
|
-
"every option value was redacted conservatively (the "
|
|
1026
|
-
"password fields cannot be told apart without the schema)"
|
|
1027
|
-
)
|
|
999
|
+
result["addon"], warnings = redact_addon_info(addon, slug)
|
|
1000
|
+
if warnings:
|
|
1001
|
+
result["warnings"] = warnings
|
|
1028
1002
|
|
|
1029
1003
|
# Extracted AFTER redaction so an app (add-on) that schema-marks log_level as
|
|
1030
1004
|
# a password surfaces the sentinel here, never the live value.
|
|
@@ -3065,22 +3039,22 @@ class AddOnTools:
|
|
|
3065
3039
|
merged_options = _merge_options(current_options, config_data["options"])
|
|
3066
3040
|
|
|
3067
3041
|
# Both the live current options and the merged result are
|
|
3068
|
-
#
|
|
3042
|
+
# secret-bearing; remember them for the global known-value
|
|
3069
3043
|
# scrub (this path fetches info directly, bypassing
|
|
3070
3044
|
# get_addon_info's harvesting). The merged copy carries any
|
|
3071
|
-
#
|
|
3045
|
+
# secret the caller is submitting right now — without it a
|
|
3072
3046
|
# freshly written secret stays unknown to the scrub until some
|
|
3073
3047
|
# later read harvests it.
|
|
3074
|
-
|
|
3048
|
+
schema_ui: list | None = addon_info.get("schema")
|
|
3049
|
+
if redaction_enabled() and isinstance(schema_ui, list):
|
|
3075
3050
|
register_known_secret_values(
|
|
3076
|
-
collect_addon_secret_values(current_options,
|
|
3077
|
-
| collect_addon_secret_values(merged_options,
|
|
3051
|
+
collect_addon_secret_values(current_options, schema_ui, slug)
|
|
3052
|
+
| collect_addon_secret_values(merged_options, schema_ui, slug)
|
|
3078
3053
|
)
|
|
3079
3054
|
|
|
3080
3055
|
# Pre-write schema check: identify fields not in the app's schema.
|
|
3081
3056
|
# Supervisor silently drops unknown fields on write; surfacing them
|
|
3082
3057
|
# here lets the caller correct mistakes before any state is changed.
|
|
3083
|
-
schema_ui: list | None = addon_info.get("schema")
|
|
3084
3058
|
if schema_ui is not None:
|
|
3085
3059
|
allowed_keys = {item["name"] for item in schema_ui if "name" in item}
|
|
3086
3060
|
ignored_fields = [
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256
RENAMED
|
File without changes
|
{ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/_install_hints.py
RENAMED
|
File without changes
|
{ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/_warnings.py
RENAMED
|
File without changes
|
{ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py
RENAMED
|
File without changes
|
{ha_mcp_dev-9.0.0.dev3182 → ha_mcp_dev-9.0.0.dev3183}/src/ha_mcp/_vendor/fastmcp/apps/app.py
RENAMED
|
File without changes
|