ha-mcp-dev 8.7.0.dev3047__tar.gz → 8.7.0.dev3053__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/PKG-INFO +1 -1
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/pyproject.toml +1 -1
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/pyproject.toml.orig +1 -1
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/config_meta.py +2 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/config_registry.py +6 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/config_settings.py +14 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/server.py +10 -168
- ha_mcp_dev-8.7.0.dev3053/src/ha_mcp/server_instructions.py +141 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/server_tool_text.py +9 -2
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/_handlers_advanced.py +3 -1
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/_tools_meta.py +2 -1
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/locales/az.json +2 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/locales/cs.json +2 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/locales/de.json +2 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/locales/en.json +2 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/locales/eo.json +2 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/locales/es.json +2 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/locales/fr.json +2 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/locales/it.json +2 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/locales/ko.json +2 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/locales/nl.json +2 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/locales/pl.json +2 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/locales/ru.json +2 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/locales/sv.json +2 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/locales/zh-Hans.json +2 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/locales/zh-Hant.json +2 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/settings_js/08_advanced.js +2 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/bug_report_config.py +6 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_dev.py +35 -36
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/transforms/categorized_search.py +2 -1
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/utils/skill_loader.py +26 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/LICENSE +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/README.md +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/__main__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_pypi_marker +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_rich_compat.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev_security.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/jev_search.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/mixins/extensions.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/_request_clock.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/requirements.txt +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/client.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/server.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/version.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_version.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/app_discovery.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/auth/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/auth/consent_form.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/auth/oidc_compat.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/auth/provider.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/backup_diff.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/backup_entity_ids.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/backup_integrations.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/backup_manager.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/backup_tags.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/browser_landing.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/client/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/client/admin_routes.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/client/rest_client.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/client/supervisor_client.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/client/websocket_client.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/client/websocket_listener.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/config.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/config_backup.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/config_overrides.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/errors.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/ha_request_queue.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/hacs_auto_refresh.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/http_transport.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/image_info.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/llm_exposure.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/log_filters.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/policy/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/policy/approval_queue.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/policy/decision_pin.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/policy/decisions.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/policy/editing.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/policy/evaluator.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/policy/events.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/policy/handlers.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/policy/middleware.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/policy/model.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/policy/mrtr.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/policy/persistence.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/policy/server_channels.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/policy/value_sources.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/py.typed +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/read_only.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/redaction.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/renamed_tools.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-actions.md +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/triggers-and-conditions.md +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/server_lifespan.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/_i18n.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/_persistence.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/_theme.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/locales/README.md +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/settings.css +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/settings.html +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/settings_js/01_i18n_state.js +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/settings_js/02_tools_restart.js +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/settings_js/03_render_save.js +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/settings_js/04_backups.js +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/settings_js/05_feature_flags.js +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/settings_js/06_policy_cards.js +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/settings_js/07_policy_actions.js +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/settings_js/09_prefs_visibility.js +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/smoke_test.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/strict_bps.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tool_dispatch.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/area_messages.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/auto_backup.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/backup.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/backup_access.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/backup_on_demand.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/best_practice_checker.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/best_practice_result.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/best_practice_variables.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/blueprint_sources.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/blueprint_write.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/bug_report_templates.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/bulk_selector.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/coercion.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/component_api.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/component_config_entries.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/component_config_reads.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/component_devices.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/component_helper_collections.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/component_registries.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/config_entry_backup.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/config_entry_flow.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/config_entry_flow_introspect.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/config_entry_identity.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/config_helpers/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/config_helpers/core_payload.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/config_helpers/create.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/config_helpers/describe.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/config_helpers/flow.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/config_helpers/listing.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/config_helpers/registry.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/config_helpers/schemas.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/config_helpers/typed_config.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/config_helpers/update.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/config_helpers/validation.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/config_subentry_restore.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/config_write_errors.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/config_write_helpers.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/core_contract.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/dashboard_card_describe.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/dashboard_list_checks.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/dev_backup.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/device_control.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/device_enrichment.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/diagnostics_helpers.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/energy_preferences.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/entity_param_parsing.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/entity_registration.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/entity_update_fields.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/error_log_parsing.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/flow_helper_lookup.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/hacs_registration.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/helper_flows.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/helpers.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/history_response.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/log_common.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/log_sources.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/log_sources_fault.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/radio/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/radio/base.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/radio/matter.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/radio/thread.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/radio/zigbee.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/radio/zwave.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/radio/zwave_parameters.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/recorder_errors.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/reference_validator.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/registry.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/response_helpers.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/scene_discovery.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/search/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/search/base.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/search/component.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/search/entities.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/search/legacy.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/search/modes.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/search/overview.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/search/response.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/search/state.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/smart_search/_base.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/smart_search/_config.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/statistics_helpers.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/statistics_resets.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/system_restart.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tool_hints.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_addons.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_areas.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_blueprints.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_bug_report.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_calendar.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_camera.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_categories.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_code.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_config_automations.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_energy.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_entities.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_filesystem.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_groups.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_hacs.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_history.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_integrations.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_labels.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_logs.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_radio.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_registry.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_resources.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_search.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_security_policy.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_service.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_services.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_system.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_themes.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_todo.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_traces.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_updates.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_utility.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_zones.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/util_helpers.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/validation_middleware.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/ws_waiters.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/transforms/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/transforms/compact_params.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/transforms/component_helpers.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/transforms/component_search.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/transforms/write_tool_note.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/transport_security.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/update_check.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/utils/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/utils/config_hash.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/utils/config_write_lock.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/utils/dashboard_patch.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/utils/data_paths.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/utils/domain_handlers.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/utils/entity_membership.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/utils/fuzzy_search.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/utils/mcp_client_host.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/utils/operation_manager.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/utils/python_sandbox.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/utils/registry_update_lock.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/utils/usage_logger.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/visibility/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/visibility/enforcement.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/visibility/model.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/visibility/persistence.py +0 -0
- {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/visibility/resolver.py +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "uv_build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "ha-mcp-dev"
|
|
7
|
-
version = "8.7.0.
|
|
7
|
+
version = "8.7.0.dev3053"
|
|
8
8
|
description = "Home Assistant MCP Server - Complete control of Home Assistant through MCP"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.13,<3.15"
|
|
@@ -4,7 +4,7 @@ build-backend = "uv_build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "ha-mcp-dev"
|
|
7
|
-
version = "8.7.0.
|
|
7
|
+
version = "8.7.0.dev3053"
|
|
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
|
|
@@ -75,6 +75,8 @@ class Setting:
|
|
|
75
75
|
range: tuple[float, float] | None = None
|
|
76
76
|
off_value: int | None = None
|
|
77
77
|
choices: tuple[str, ...] | None = None
|
|
78
|
+
# Free text whose line breaks matter; the UI edits it in a textarea.
|
|
79
|
+
multiline: bool = False
|
|
78
80
|
# An env value that does not parse or is out of range logs a warning and
|
|
79
81
|
# gives the default, instead of failing the settings validation.
|
|
80
82
|
lenient: bool = False
|
|
@@ -19,6 +19,7 @@ from ha_mcp.config_settings import Settings
|
|
|
19
19
|
|
|
20
20
|
__all__ = [
|
|
21
21
|
"ADDON_SYNCED_ADVANCED_FIELDS",
|
|
22
|
+
"ADVANCED_MULTILINE",
|
|
22
23
|
"ADVANCED_RESTART_REQUIRED",
|
|
23
24
|
"ADVANCED_SETTINGS_FIELDS",
|
|
24
25
|
"BACKUP_OVERRIDE_FIELDS",
|
|
@@ -244,6 +245,11 @@ _ADVANCED_SETTINGS_CHOICES: dict[str, tuple[str, ...]] = {
|
|
|
244
245
|
if setting.choices is not None
|
|
245
246
|
}
|
|
246
247
|
|
|
248
|
+
# Advanced string fields edited as multi-line text (renders as <textarea>).
|
|
249
|
+
ADVANCED_MULTILINE: frozenset[str] = frozenset(
|
|
250
|
+
name for name, _field, setting in _settings_of("advanced") if setting.multiline
|
|
251
|
+
)
|
|
252
|
+
|
|
247
253
|
# Advanced fields that take effect only after a restart of the MCP server.
|
|
248
254
|
ADVANCED_RESTART_REQUIRED: frozenset[str] = frozenset(
|
|
249
255
|
name
|
|
@@ -280,6 +280,20 @@ class Settings(BaseSettings):
|
|
|
280
280
|
Setting(surface="advanced", section="tools_surface", restart_required=True),
|
|
281
281
|
] = Field("all", alias="ENABLED_TOOL_MODULES")
|
|
282
282
|
|
|
283
|
+
# Free text appended to the MCP server instructions, so every client
|
|
284
|
+
# connecting to this installation gets the same user-defined guidance
|
|
285
|
+
# (e.g. where household notes live). Empty adds nothing.
|
|
286
|
+
custom_instructions: Annotated[
|
|
287
|
+
str,
|
|
288
|
+
Setting(
|
|
289
|
+
surface="advanced",
|
|
290
|
+
section="tools_surface",
|
|
291
|
+
app=_ALL_FLAVORS,
|
|
292
|
+
restart_required=True,
|
|
293
|
+
multiline=True,
|
|
294
|
+
),
|
|
295
|
+
] = Field("", alias="HAMCP_CUSTOM_INSTRUCTIONS")
|
|
296
|
+
|
|
283
297
|
# Dashboard partial update tools (python_transform, find_card)
|
|
284
298
|
# These are token-efficient alternatives to full config replacement.
|
|
285
299
|
# Disable when using clients with programmatic tool use (future).
|
|
@@ -19,16 +19,19 @@ from pydantic import Field
|
|
|
19
19
|
from .config import _PACKAGE_VERSION, get_global_settings
|
|
20
20
|
from .errors import ErrorCode, create_error_response
|
|
21
21
|
from .http_transport import HttpTransportFastMCP as FastMCP
|
|
22
|
+
from .server_instructions import (
|
|
23
|
+
build_skills_instructions,
|
|
24
|
+
compose_instructions,
|
|
25
|
+
skill_tool_hidden,
|
|
26
|
+
)
|
|
22
27
|
from .server_lifespan import server_lifespan
|
|
23
28
|
from .server_tool_text import (
|
|
24
|
-
ISSUE_FILING_INSTRUCTIONS,
|
|
25
29
|
LITE_DOCSTRING_DESTINATIONS,
|
|
26
30
|
LITE_DOCSTRINGS,
|
|
27
|
-
READ_ONLY_INSTRUCTIONS,
|
|
28
31
|
SEARCH_KEYWORDS,
|
|
29
32
|
SEARCH_TOOL_DESCRIPTION,
|
|
33
|
+
SKILL_TOOL_NAME,
|
|
30
34
|
SKILL_USE_BEFORE_KEYWORDS,
|
|
31
|
-
TOOL_DISCOVERY_INSTRUCTIONS,
|
|
32
35
|
)
|
|
33
36
|
from .tools.helpers import raise_tool_error
|
|
34
37
|
from .tools.tool_hints import read_only_hints
|
|
@@ -46,12 +49,6 @@ if TYPE_CHECKING:
|
|
|
46
49
|
|
|
47
50
|
logger = logging.getLogger(__name__)
|
|
48
51
|
|
|
49
|
-
# Name of the consolidated skill tool. Defined as a module
|
|
50
|
-
# constant so settings UI, instructions, tests, and pinning all agree on
|
|
51
|
-
# one canonical string. 18 chars — well under the 40-char cap that
|
|
52
|
-
# Cloudflare's MCP portal enforces (#1121).
|
|
53
|
-
SKILL_TOOL_NAME = "ha_get_skill_guide"
|
|
54
|
-
|
|
55
52
|
# Names this tool replaced in #1134. Appended to the catalog description
|
|
56
53
|
# so agents trained on the prior catalog (or pasting old instructions)
|
|
57
54
|
# see the redirect inside the tool itself, not just via BM25 keyword
|
|
@@ -319,147 +316,18 @@ class HomeAssistantSmartMCPServer:
|
|
|
319
316
|
|
|
320
317
|
return get_skills_dir()
|
|
321
318
|
|
|
322
|
-
def _skill_tool_hidden(self) -> bool:
|
|
323
|
-
"""True when ha_get_skill_guide will be absent from the catalog.
|
|
324
|
-
|
|
325
|
-
The tool is user- or env-disableable only while strict-BPS mode
|
|
326
|
-
is off (#1886) — apply_tool_visibility strips the disable
|
|
327
|
-
otherwise. Consulted at instruction-build time so the skills
|
|
328
|
-
header doesn't direct clients to a tool that is not being
|
|
329
|
-
served. Fails toward False (mention the tool): a wrong mention
|
|
330
|
-
costs one unknown-tool error, a wrong omission hides the only
|
|
331
|
-
non-resource access path.
|
|
332
|
-
"""
|
|
333
|
-
try:
|
|
334
|
-
from .settings_ui._persistence import effective_tool_config
|
|
335
|
-
from .settings_ui._tools_meta import effective_mandatory_tools
|
|
336
|
-
|
|
337
|
-
states = effective_tool_config().get("tools", {})
|
|
338
|
-
return states.get(
|
|
339
|
-
SKILL_TOOL_NAME
|
|
340
|
-
) == "disabled" and SKILL_TOOL_NAME not in effective_mandatory_tools(
|
|
341
|
-
self.settings
|
|
342
|
-
)
|
|
343
|
-
except Exception:
|
|
344
|
-
logger.debug("skill-tool visibility lookup failed", exc_info=True)
|
|
345
|
-
return False
|
|
346
|
-
|
|
347
319
|
def _build_instructions(self) -> str:
|
|
348
320
|
"""Compose the server instructions sent in the MCP initialize response."""
|
|
349
|
-
|
|
350
|
-
skills = self._build_skills_instructions()
|
|
351
|
-
if skills:
|
|
352
|
-
sections.append(skills)
|
|
353
|
-
|
|
354
|
-
# Surface Read Only Mode in the startup instructions so clients
|
|
355
|
-
# that show server instructions warn the model up front. Startup
|
|
356
|
-
# state only — live flips are covered by the structured
|
|
357
|
-
# READ_ONLY_MODE call errors and the ha_get_overview field.
|
|
358
|
-
if self.settings.read_only_mode:
|
|
359
|
-
sections.append(READ_ONLY_INSTRUCTIONS)
|
|
360
|
-
sections.append(ISSUE_FILING_INSTRUCTIONS)
|
|
361
|
-
return "\n\n".join(sections)
|
|
321
|
+
return compose_instructions(self._build_skills_instructions(), self.settings)
|
|
362
322
|
|
|
363
323
|
def _build_skills_instructions(self) -> str | None:
|
|
364
|
-
"""
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
and includes it as-is in the server instructions. The description
|
|
368
|
-
is authored for LLM consumption and should not be parsed or
|
|
369
|
-
restructured by code.
|
|
370
|
-
|
|
371
|
-
Returns None when no skills directory or no parseable skills are
|
|
372
|
-
present, leaving instructions unchanged from the default (None).
|
|
373
|
-
"""
|
|
374
|
-
skills_dir = self._get_skills_dir()
|
|
375
|
-
if not skills_dir:
|
|
376
|
-
return None
|
|
377
|
-
|
|
378
|
-
try:
|
|
379
|
-
entries = sorted(skills_dir.iterdir())
|
|
380
|
-
except OSError as e:
|
|
381
|
-
logger.warning("Could not read skills directory %s: %s", skills_dir, e)
|
|
382
|
-
return None
|
|
383
|
-
|
|
384
|
-
skill_blocks: list[str] = []
|
|
385
|
-
for skill_dir in entries:
|
|
386
|
-
main_file = skill_dir / "SKILL.md"
|
|
387
|
-
if not skill_dir.is_dir() or not main_file.exists():
|
|
388
|
-
continue
|
|
389
|
-
|
|
390
|
-
block = self._build_skill_block(skill_dir.name, main_file)
|
|
391
|
-
if block:
|
|
392
|
-
skill_blocks.append(block)
|
|
393
|
-
|
|
394
|
-
if not skill_blocks:
|
|
395
|
-
return None
|
|
396
|
-
|
|
397
|
-
if self._skill_tool_hidden():
|
|
398
|
-
# The user disabled the skill tool (possible only outside
|
|
399
|
-
# strict-BPS mode, #1886) — directing clients to it would
|
|
400
|
-
# steer them into a tool that is not in the catalog. Their
|
|
401
|
-
# stated fallback is a local skills install.
|
|
402
|
-
access_method = (
|
|
403
|
-
"Read the skill via MCP resources (resources/read with the "
|
|
404
|
-
"skill:// URI) — if you can read these instructions, you "
|
|
405
|
-
"should be able to access resources as well. If for any "
|
|
406
|
-
"reason you cannot access MCP resources, refer to your "
|
|
407
|
-
"locally installed copy of these skills instead (the "
|
|
408
|
-
f"{SKILL_TOOL_NAME} fallback tool is disabled on this "
|
|
409
|
-
"server)."
|
|
410
|
-
)
|
|
411
|
-
else:
|
|
412
|
-
access_method = (
|
|
413
|
-
"Read the skill via MCP resources (resources/read with the "
|
|
414
|
-
"skill:// URI) — if you can read these instructions, you "
|
|
415
|
-
"should be able to access resources as well. If for any "
|
|
416
|
-
f"reason you cannot access MCP resources, call {SKILL_TOOL_NAME}() "
|
|
417
|
-
"with no arguments as a fallback: it returns SKILL.md, then "
|
|
418
|
-
"pass file='<path>' for a reference file. If you can access "
|
|
419
|
-
"resources normally, do "
|
|
420
|
-
"not waste time or tokens on that tool."
|
|
421
|
-
)
|
|
422
|
-
|
|
423
|
-
header = (
|
|
424
|
-
"IMPORTANT: This server provides best-practice skills that MUST "
|
|
425
|
-
"be consulted before performing matching actions. "
|
|
426
|
-
"Read the SKILL.md for the matching skill "
|
|
427
|
-
"\u2014 it contains a Reference Files table that maps tasks to "
|
|
428
|
-
"specific reference files. You MUST read the referenced files "
|
|
429
|
-
"that match your current task before proceeding. "
|
|
430
|
-
"Do NOT load all reference files upfront "
|
|
431
|
-
"\u2014 only the ones the table directs you to.\n\n"
|
|
432
|
-
f"How to access: {access_method}\n"
|
|
324
|
+
"""The skills section of the instructions, or None without skills."""
|
|
325
|
+
return build_skills_instructions(
|
|
326
|
+
self._get_skills_dir(), self.settings, skill_tool_hidden(self.settings)
|
|
433
327
|
)
|
|
434
328
|
|
|
435
|
-
instructions = header + "\n".join(skill_blocks)
|
|
436
|
-
|
|
437
|
-
# Append tool search instructions when enabled
|
|
438
|
-
if self.settings.enable_tool_search:
|
|
439
|
-
instructions += TOOL_DISCOVERY_INSTRUCTIONS.format(
|
|
440
|
-
pinned=", ".join(DEFAULT_PINNED_TOOLS)
|
|
441
|
-
)
|
|
442
|
-
|
|
443
|
-
return instructions
|
|
444
|
-
|
|
445
329
|
_parse_skill_frontmatter = staticmethod(parse_skill_frontmatter)
|
|
446
330
|
|
|
447
|
-
def _build_skill_block(self, skill_name: str, main_file: Path) -> str | None:
|
|
448
|
-
"""Build an instruction block for a single skill.
|
|
449
|
-
|
|
450
|
-
Reads the description field from YAML frontmatter and includes it
|
|
451
|
-
verbatim. The description is designed for LLM consumption and
|
|
452
|
-
contains its own trigger conditions and symptom indicators.
|
|
453
|
-
"""
|
|
454
|
-
frontmatter = self._parse_skill_frontmatter(main_file)
|
|
455
|
-
if not frontmatter:
|
|
456
|
-
return None
|
|
457
|
-
|
|
458
|
-
description = frontmatter["description"]
|
|
459
|
-
uri = f"skill://{skill_name}/SKILL.md"
|
|
460
|
-
|
|
461
|
-
return f"\n### Skill: {skill_name} ({uri})\n{description.strip()}"
|
|
462
|
-
|
|
463
331
|
def _apply_settings_visibility(self) -> None:
|
|
464
332
|
"""Apply persisted tool visibility from ``tool_config.json``.
|
|
465
333
|
|
|
@@ -1089,32 +957,6 @@ class HomeAssistantSmartMCPServer:
|
|
|
1089
957
|
else:
|
|
1090
958
|
logger.warning(message, *args)
|
|
1091
959
|
|
|
1092
|
-
def _list_bundled_skills(
|
|
1093
|
-
self, skills_dir: Path
|
|
1094
|
-
) -> list[tuple[str, Path, dict[str, Any]]]:
|
|
1095
|
-
"""Return parsed (name, dir, frontmatter) triples for valid bundled skills.
|
|
1096
|
-
|
|
1097
|
-
Skips entries that aren't directories, lack ``SKILL.md``, or whose
|
|
1098
|
-
frontmatter doesn't parse. Sorted by directory name for stable
|
|
1099
|
-
ordering across clients.
|
|
1100
|
-
"""
|
|
1101
|
-
try:
|
|
1102
|
-
entries = sorted(skills_dir.iterdir())
|
|
1103
|
-
except OSError as e:
|
|
1104
|
-
logger.warning("Could not read skills directory %s: %s", skills_dir, e)
|
|
1105
|
-
return []
|
|
1106
|
-
|
|
1107
|
-
skills: list[tuple[str, Path, dict[str, Any]]] = []
|
|
1108
|
-
for skill_dir in entries:
|
|
1109
|
-
main_file = skill_dir / "SKILL.md"
|
|
1110
|
-
if not skill_dir.is_dir() or not main_file.exists():
|
|
1111
|
-
continue
|
|
1112
|
-
frontmatter = self._parse_skill_frontmatter(main_file)
|
|
1113
|
-
if not frontmatter:
|
|
1114
|
-
continue
|
|
1115
|
-
skills.append((skill_dir.name, skill_dir, frontmatter))
|
|
1116
|
-
return skills
|
|
1117
|
-
|
|
1118
960
|
def _register_skill_guide_tool(self, skills_dir: Path | None) -> int:
|
|
1119
961
|
"""Register the ``ha_get_skill_guide`` tool unconditionally.
|
|
1120
962
|
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"""The instructions the server sends in the MCP initialize response.
|
|
2
|
+
|
|
3
|
+
Sections, in order: the bundled best-practice skills with how to read them
|
|
4
|
+
(plus the tool-search note when that mode is on), the Read Only Mode
|
|
5
|
+
warning, the issue-filing rule, and the installation owner's
|
|
6
|
+
``custom_instructions``. The skills header and access fallbacks are
|
|
7
|
+
defined here; the notices come from ``server_tool_text``.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
import logging
|
|
13
|
+
from pathlib import Path
|
|
14
|
+
from typing import TYPE_CHECKING
|
|
15
|
+
|
|
16
|
+
from .server_tool_text import (
|
|
17
|
+
ISSUE_FILING_INSTRUCTIONS,
|
|
18
|
+
READ_ONLY_INSTRUCTIONS,
|
|
19
|
+
SKILL_TOOL_NAME,
|
|
20
|
+
TOOL_DISCOVERY_INSTRUCTIONS,
|
|
21
|
+
)
|
|
22
|
+
from .transforms import DEFAULT_PINNED_TOOLS
|
|
23
|
+
from .utils.skill_loader import list_skills
|
|
24
|
+
|
|
25
|
+
if TYPE_CHECKING:
|
|
26
|
+
from .config_settings import Settings
|
|
27
|
+
|
|
28
|
+
logger = logging.getLogger(__name__)
|
|
29
|
+
|
|
30
|
+
OWNER_HEADING = "## Instructions from this installation's owner"
|
|
31
|
+
|
|
32
|
+
_SKILLS_HEADER = (
|
|
33
|
+
"IMPORTANT: This server provides best-practice skills that MUST "
|
|
34
|
+
"be consulted before performing matching actions. "
|
|
35
|
+
"Read the SKILL.md for the matching skill "
|
|
36
|
+
"— it contains a Reference Files table that maps tasks to "
|
|
37
|
+
"specific reference files. You MUST read the referenced files "
|
|
38
|
+
"that match your current task before proceeding. "
|
|
39
|
+
"Do NOT load all reference files upfront "
|
|
40
|
+
"— only the ones the table directs you to.\n\n"
|
|
41
|
+
"How to access: {access_method}\n"
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
_RESOURCE_ACCESS = (
|
|
45
|
+
"Read the skill via MCP resources (resources/read with the "
|
|
46
|
+
"skill:// URI) — if you can read these instructions, you "
|
|
47
|
+
"should be able to access resources as well. "
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
# The user disabled the skill tool (possible only outside strict-BPS mode,
|
|
51
|
+
# #1886) — directing clients to it would steer them into a tool that is not
|
|
52
|
+
# in the catalog. Their stated fallback is a local skills install.
|
|
53
|
+
_LOCAL_SKILLS_FALLBACK = (
|
|
54
|
+
"If for any reason you cannot access MCP resources, refer to your "
|
|
55
|
+
"locally installed copy of these skills instead (the "
|
|
56
|
+
f"{SKILL_TOOL_NAME} fallback tool is disabled on this server)."
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
_SKILL_TOOL_FALLBACK = (
|
|
60
|
+
f"If for any reason you cannot access MCP resources, call {SKILL_TOOL_NAME}() "
|
|
61
|
+
"with no arguments as a fallback: it returns SKILL.md, then "
|
|
62
|
+
"pass file='<path>' for a reference file. If you can access "
|
|
63
|
+
"resources normally, do not waste time or tokens on that tool."
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def skill_tool_hidden(settings: Settings) -> bool:
|
|
68
|
+
"""True when ha_get_skill_guide will be absent from the catalog.
|
|
69
|
+
|
|
70
|
+
The tool is user- or env-disableable only while strict-BPS mode
|
|
71
|
+
is off (#1886) — apply_tool_visibility strips the disable
|
|
72
|
+
otherwise. Consulted at instruction-build time so the skills
|
|
73
|
+
header doesn't direct clients to a tool that is not being
|
|
74
|
+
served. Fails toward False (mention the tool): a wrong mention
|
|
75
|
+
costs one unknown-tool error, a wrong omission hides the only
|
|
76
|
+
non-resource access path.
|
|
77
|
+
"""
|
|
78
|
+
try:
|
|
79
|
+
from .settings_ui._persistence import effective_tool_config
|
|
80
|
+
from .settings_ui._tools_meta import effective_mandatory_tools
|
|
81
|
+
|
|
82
|
+
states = effective_tool_config(settings).get("tools", {})
|
|
83
|
+
return states.get(
|
|
84
|
+
SKILL_TOOL_NAME
|
|
85
|
+
) == "disabled" and SKILL_TOOL_NAME not in effective_mandatory_tools(settings)
|
|
86
|
+
except Exception:
|
|
87
|
+
logger.debug("skill-tool visibility lookup failed", exc_info=True)
|
|
88
|
+
return False
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
def skill_block(skill_name: str, description: str) -> str:
|
|
92
|
+
"""One skill's entry: its resource URI and its LLM-authored description."""
|
|
93
|
+
uri = f"skill://{skill_name}/SKILL.md"
|
|
94
|
+
return f"\n### Skill: {skill_name} ({uri})\n{description.strip()}"
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
def build_skills_instructions(
|
|
98
|
+
skills_dir: Path | None, settings: Settings, tool_hidden: bool
|
|
99
|
+
) -> str | None:
|
|
100
|
+
"""Build the skills section from each bundled SKILL.md's frontmatter.
|
|
101
|
+
|
|
102
|
+
The description field is authored for LLM consumption and included
|
|
103
|
+
as-is, never parsed or restructured by code. Returns None when there is
|
|
104
|
+
no skills directory or no parseable skill; the instructions then start
|
|
105
|
+
with the notices.
|
|
106
|
+
"""
|
|
107
|
+
skills = list_skills(skills_dir) if skills_dir else []
|
|
108
|
+
if not skills:
|
|
109
|
+
return None
|
|
110
|
+
|
|
111
|
+
fallback = _LOCAL_SKILLS_FALLBACK if tool_hidden else _SKILL_TOOL_FALLBACK
|
|
112
|
+
header = _SKILLS_HEADER.format(access_method=_RESOURCE_ACCESS + fallback)
|
|
113
|
+
instructions = header + "\n".join(
|
|
114
|
+
skill_block(name, frontmatter["description"])
|
|
115
|
+
for name, _dir, frontmatter in skills
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
if settings.enable_tool_search:
|
|
119
|
+
instructions += TOOL_DISCOVERY_INSTRUCTIONS.format(
|
|
120
|
+
pinned=", ".join(DEFAULT_PINNED_TOOLS)
|
|
121
|
+
)
|
|
122
|
+
|
|
123
|
+
return instructions
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
def compose_instructions(skills: str | None, settings: Settings) -> str:
|
|
127
|
+
"""Join the skills section with the startup notices and the owner's text."""
|
|
128
|
+
sections = [skills] if skills else []
|
|
129
|
+
# Surface Read Only Mode in the startup instructions so clients
|
|
130
|
+
# that show server instructions warn the model up front. Startup
|
|
131
|
+
# state only — live flips are covered by the structured
|
|
132
|
+
# READ_ONLY_MODE call errors and the ha_get_overview field.
|
|
133
|
+
if settings.read_only_mode:
|
|
134
|
+
sections.append(READ_ONLY_INSTRUCTIONS)
|
|
135
|
+
sections.append(ISSUE_FILING_INSTRUCTIONS)
|
|
136
|
+
custom = settings.custom_instructions.strip()
|
|
137
|
+
if custom:
|
|
138
|
+
# Length only: the text itself is the owner's and may be personal.
|
|
139
|
+
logger.info("custom_instructions active (%d characters)", len(custom))
|
|
140
|
+
sections.append(f"{OWNER_HEADING}\n{custom}")
|
|
141
|
+
return "\n\n".join(sections)
|
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
"""Static text the server publishes about its tools.
|
|
2
2
|
|
|
3
3
|
Holds the search tool description, the BM25 keyword boosts, the lite
|
|
4
|
-
docstring variants with their destinations
|
|
5
|
-
``HomeAssistantSmartMCPServer`` exposes
|
|
4
|
+
docstring variants with their destinations and the skill keyword block,
|
|
5
|
+
which ``HomeAssistantSmartMCPServer`` exposes as class attributes, plus the
|
|
6
|
+
skill tool's name and the instruction notices ``server_instructions`` uses.
|
|
6
7
|
"""
|
|
7
8
|
|
|
8
9
|
from __future__ import annotations
|
|
9
10
|
|
|
11
|
+
# Name of the consolidated skill tool. Defined as a module constant so the
|
|
12
|
+
# tool registration, the instructions, the mandatory-tool set, the default
|
|
13
|
+
# pins and the tests agree on one canonical string. 18 chars — well under
|
|
14
|
+
# the 40-char cap that Cloudflare's MCP portal enforces (#1121).
|
|
15
|
+
SKILL_TOOL_NAME = "ha_get_skill_guide"
|
|
16
|
+
|
|
10
17
|
# Description for the unified search tool
|
|
11
18
|
SEARCH_TOOL_DESCRIPTION = (
|
|
12
19
|
"Search ALL Home Assistant tools by ENGLISH keyword. Each hit is "
|
{ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/_handlers_advanced.py
RENAMED
|
@@ -88,7 +88,7 @@ def _advanced_field_row(
|
|
|
88
88
|
_ADVANCED_SETTINGS_SENTINELS,
|
|
89
89
|
OAUTH_MODE_TOKEN,
|
|
90
90
|
)
|
|
91
|
-
from ..config_registry import ADVANCED_RESTART_REQUIRED
|
|
91
|
+
from ..config_registry import ADVANCED_MULTILINE, ADVANCED_RESTART_REQUIRED
|
|
92
92
|
|
|
93
93
|
origin = _origin_for_advanced_field(env_name, overrides=overrides)
|
|
94
94
|
value: Any = getattr(settings, fname, None)
|
|
@@ -122,6 +122,8 @@ def _advanced_field_row(
|
|
|
122
122
|
choices = _ADVANCED_SETTINGS_CHOICES.get(fname)
|
|
123
123
|
if choices is not None:
|
|
124
124
|
row["choices"] = list(choices)
|
|
125
|
+
if fname in ADVANCED_MULTILINE:
|
|
126
|
+
row["multiline"] = True
|
|
125
127
|
return row
|
|
126
128
|
|
|
127
129
|
|
|
@@ -18,6 +18,7 @@ import logging
|
|
|
18
18
|
from collections.abc import Iterable
|
|
19
19
|
from typing import TYPE_CHECKING, Any, NamedTuple, NotRequired, TypedDict
|
|
20
20
|
|
|
21
|
+
from ..server_tool_text import SKILL_TOOL_NAME
|
|
21
22
|
from ..transforms import categorize_capability
|
|
22
23
|
|
|
23
24
|
if TYPE_CHECKING:
|
|
@@ -116,7 +117,7 @@ MANDATORY_TOOLS: set[str] = {
|
|
|
116
117
|
# _save_feature_flags) so each direction of the conflict gets an
|
|
117
118
|
# actionable error.
|
|
118
119
|
BPS_MANDATORY_TOOLS: set[str] = {
|
|
119
|
-
|
|
120
|
+
SKILL_TOOL_NAME,
|
|
120
121
|
}
|
|
121
122
|
|
|
122
123
|
|
{ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/locales/az.json
RENAMED
|
@@ -472,6 +472,8 @@
|
|
|
472
472
|
"advanced.dashboard_screenshot_engine_url.help": "Ekran görüntüsü mühərrikinin əsas URL-i. Supervisor vasitəsilə avtomatik aşkarlama üçün boş saxlayın. Dərhal tətbiq edilir.",
|
|
473
473
|
"advanced.enable_websocket.label": "WebSocket-i aktivləşdir",
|
|
474
474
|
"advanced.enable_websocket.help": "WebSocket statusunun izlənməsi. Deaktiv edilməsi sorğulamaya (polling) qayıdır və bir çox alətin işini zəiflədir.",
|
|
475
|
+
"advanced.custom_instructions.label": "Xüsusi server təlimatları",
|
|
476
|
+
"advanced.custom_instructions.help": "Qoşulan hər bir süni intellekt köməkçisinə MCP server təlimatlarının bir hissəsi olaraq göndərilən mətn — məsələn, ev qeydlərinin harada saxlandığı və onların nə vaxt oxunmalı və ya yenilənməli olduğu. Həmçinin bu alətlər dəstindən istifadə edən Home Assistant söhbət agentlərinin (Assist) sorğusunun bir hissəsidir. Onu bütün müştərilərinizə eyni vaxtda çatmalı olan təlimatlar üçün istifadə edin; onu qısa və məxfi məlumatlardan azad saxlayın. Heç nə əlavə etməmək üçün boş buraxın. Yenidən başladılmasını tələb edir; müştərilər yenidən qoşulduqda dəyişikliyi görürlər.",
|
|
475
477
|
"advanced.enabled_tool_modules.label": "Aktiv alət modulları",
|
|
476
478
|
"advanced.enabled_tool_modules.help": "Vergüllə ayrılmış modul adları və ya 'all'.",
|
|
477
479
|
"advanced.enable_dashboard_partial_tools.label": "İdarə panelinin qismən yenilənməsi alətləri",
|
{ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/locales/cs.json
RENAMED
|
@@ -472,6 +472,8 @@
|
|
|
472
472
|
"advanced.dashboard_screenshot_engine_url.help": "Základní URL enginu pro snímky obrazovky. Ponechte prázdné pro automatické zjišťování Supervisor. Platí okamžitě.",
|
|
473
473
|
"advanced.enable_websocket.label": "Povolit WebSocket",
|
|
474
474
|
"advanced.enable_websocket.help": "Sledování stavu přes WebSocket. Vypnutí přepne na polling a omezí funkčnost mnoha nástrojů.",
|
|
475
|
+
"advanced.custom_instructions.label": "Vlastní instrukce serveru",
|
|
476
|
+
"advanced.custom_instructions.help": "Text odeslaný každému připojujícímu se AI asistentu jako součást instrukcí MCP serveru — například kde jsou uloženy poznámky domácnosti a kdy je číst nebo aktualizovat. Je také součástí promptu konverzačních agentů Home Assistant (Assist), kteří tuto sadu nástrojů používají. Použijte jej pro pokyny, které by měly zasáhnout všechny vaše klienti najednou; udržujte jej stručný a bez tajných údajů. Ponechte prázdné, pokud nechcete nic přidat. Vyžaduje restart; klienti uvidí změnu po opětovném připojení.",
|
|
475
477
|
"advanced.enabled_tool_modules.label": "Povolené moduly nástrojů",
|
|
476
478
|
"advanced.enabled_tool_modules.help": "Názvy modulů oddělené čárkami nebo 'all'.",
|
|
477
479
|
"advanced.enable_dashboard_partial_tools.label": "Nástroje pro částečnou aktualizaci panelu",
|
{ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/locales/de.json
RENAMED
|
@@ -472,6 +472,8 @@
|
|
|
472
472
|
"advanced.dashboard_screenshot_engine_url.help": "Basis-URL der Screenshot-Engine. Lasse leer für Supervisor-Auto-Discovery. Wirkt sofort.",
|
|
473
473
|
"advanced.enable_websocket.label": "WebSocket aktivieren",
|
|
474
474
|
"advanced.enable_websocket.help": "WebSocket-Zustandsüberwachung. Das Deaktivieren fällt auf Polling zurück und beeinträchtigt viele Tools.",
|
|
475
|
+
"advanced.custom_instructions.label": "Eigene Server-Anweisungen",
|
|
476
|
+
"advanced.custom_instructions.help": "Text, den jeder verbundene KI-Assistent als Teil der MCP-Server-Anweisungen erhält – zum Beispiel, wo Notizen zum Haushalt liegen und wann sie gelesen oder aktualisiert werden sollen. Auch Teil des Prompts von Home-Assistant-Sprachassistenten (Assist), die dieses Toolset nutzen. Gedacht für Hinweise, die alle deine Clients auf einmal erreichen sollen; halte ihn kurz und ohne Geheimnisse. Leer lassen, um nichts hinzuzufügen. Erfordert einen Neustart; Clients sehen die Änderung nach dem erneuten Verbinden.",
|
|
475
477
|
"advanced.enabled_tool_modules.label": "Aktivierte Tool-Module",
|
|
476
478
|
"advanced.enabled_tool_modules.help": "Kommagetrennte Modulnamen oder 'all'.",
|
|
477
479
|
"advanced.enable_dashboard_partial_tools.label": "Dashboard-Partial-Update-Tools",
|
{ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/locales/en.json
RENAMED
|
@@ -472,6 +472,8 @@
|
|
|
472
472
|
"advanced.dashboard_screenshot_engine_url.help": "Base URL of the screenshot engine. Leave blank for Supervisor auto-discovery. Applies immediately.",
|
|
473
473
|
"advanced.enable_websocket.label": "Enable WebSocket",
|
|
474
474
|
"advanced.enable_websocket.help": "WebSocket state monitoring. Disabling falls back to polling and degrades many tools.",
|
|
475
|
+
"advanced.custom_instructions.label": "Custom server instructions",
|
|
476
|
+
"advanced.custom_instructions.help": "Text sent to every AI assistant that connects, as part of the MCP server instructions — for example where household notes are kept and when to read or update them. Also part of the prompt of Home Assistant conversation agents (Assist) that use this toolset. Use it for guidance that should reach all your clients at once; keep it short and free of secrets. Leave empty to add nothing. Requires restart; clients see the change when they reconnect.",
|
|
475
477
|
"advanced.enabled_tool_modules.label": "Enabled tool modules",
|
|
476
478
|
"advanced.enabled_tool_modules.help": "Comma-separated module names, or 'all'.",
|
|
477
479
|
"advanced.enable_dashboard_partial_tools.label": "Dashboard partial-update tools",
|
{ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/locales/eo.json
RENAMED
|
@@ -472,6 +472,8 @@
|
|
|
472
472
|
"advanced.dashboard_screenshot_engine_url.help": "Baza URL de la ekrankopiga motoro. Lasu malplena por aŭtomata malkovro de Supervisor. Aplikiĝas tuj.",
|
|
473
473
|
"advanced.enable_websocket.label": "Ebligi WebSocket",
|
|
474
474
|
"advanced.enable_websocket.help": "Monitorado de WebSocket-stato. Malŝalto falas al balotado kaj malbonigas multajn ilojn.",
|
|
475
|
+
"advanced.custom_instructions.label": "Propraj servilaj instrukcioj",
|
|
476
|
+
"advanced.custom_instructions.help": "Teksto sendita al ĉiu AI-asistanto kiu konektiĝas, kiel parto de la instrukcioj de la serviloj MCP — ekzemple kie hejmaj notoj estas konservitaj kaj kiam legi aŭ ĝisdatigi ilin. Ankaŭ parto de la prompto de hejmaŭtomatigaj konversaciaj agentoj (Assist) de Home Assistant, kiuj uzas ĉi tiun ilaron. Uzu ĝin por gvidado, kiu devas atingi ĉiujn viajn klientojn samtempe; tenu ĝin mallonga kaj libera de sekretoj. Lasu malplena por aldoni nenion. Postulas relumon; klientoj vidas la ŝanĝon kiam ili rekonektiĝas.",
|
|
475
477
|
"advanced.enabled_tool_modules.label": "Ebligitaj il-moduloj",
|
|
476
478
|
"advanced.enabled_tool_modules.help": "Komo-dividitaj modulnomoj, aŭ 'all'.",
|
|
477
479
|
"advanced.enable_dashboard_partial_tools.label": "Iloj por parta ĝisdatigo de panelo",
|
{ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/locales/es.json
RENAMED
|
@@ -472,6 +472,8 @@
|
|
|
472
472
|
"advanced.dashboard_screenshot_engine_url.help": "URL base del motor de capturas. Déjalo vacío para la detección automática del Supervisor. Se aplica de inmediato.",
|
|
473
473
|
"advanced.enable_websocket.label": "Activar WebSocket",
|
|
474
474
|
"advanced.enable_websocket.help": "Monitoreo del estado por WebSocket. Si se desactiva, se recurre al sondeo (polling) y se degradan muchas herramientas.",
|
|
475
|
+
"advanced.custom_instructions.label": "Instrucciones personalizadas del servidor",
|
|
476
|
+
"advanced.custom_instructions.help": "Texto enviado a cada asistente de IA que se conecta, como parte de las instrucciones del servidor MCP (por ejemplo, dónde se guardan las notas del hogar y cuándo leerlas o actualizarlas). También forma parte del prompt de los agentes de conversación de Home Assistant (Assist) que utilizan este conjunto de herramientas. Úsalo para directrices que deban llegar a todos tus clientes a la vez; mantenlo breve y sin datos confidenciales. Déjalo vacío para no añadir nada. Requiere reinicio; los clientes verán el cambio cuando se reconecten.",
|
|
475
477
|
"advanced.enabled_tool_modules.label": "Módulos de herramientas activados",
|
|
476
478
|
"advanced.enabled_tool_modules.help": "Nombres de módulos separados por comas, o 'all'.",
|
|
477
479
|
"advanced.enable_dashboard_partial_tools.label": "Herramientas de actualización parcial de paneles",
|
{ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/locales/fr.json
RENAMED
|
@@ -472,6 +472,8 @@
|
|
|
472
472
|
"advanced.dashboard_screenshot_engine_url.help": "URL de base du moteur de capture d'écran. Laissez vide pour la découverte automatique par le Supervisor. S'applique immédiatement.",
|
|
473
473
|
"advanced.enable_websocket.label": "Activer WebSocket",
|
|
474
474
|
"advanced.enable_websocket.help": "Surveillance de l'état via WebSocket. La désactivation bascule vers l'interrogation (polling) et dégrade de nombreux outils.",
|
|
475
|
+
"advanced.custom_instructions.label": "Instructions personnalisées du serveur",
|
|
476
|
+
"advanced.custom_instructions.help": "Texte envoyé à chaque assistant IA qui se connecte, dans le cadre des instructions du serveur MCP — par exemple, l'emplacement des notes du foyer et le moment de les lire ou de les mettre à jour. Fait également partie du prompt des agents de conversation Home Assistant (Assist) qui utilisent cet ensemble d'outils. Utilisez-le pour fournir des directives destinées à tous vos clients en même temps ; restez concis et évitez d'y inclure des secrets. Laissez vide pour ne rien ajouter. Nécessite un redémarrage ; les clients voient le changement lorsqu'ils se reconnectent.",
|
|
475
477
|
"advanced.enabled_tool_modules.label": "Modules d'outils activés",
|
|
476
478
|
"advanced.enabled_tool_modules.help": "Noms de modules séparés par des virgules, ou 'all'.",
|
|
477
479
|
"advanced.enable_dashboard_partial_tools.label": "Outils de mise à jour partielle du tableau de bord",
|
{ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/locales/it.json
RENAMED
|
@@ -472,6 +472,8 @@
|
|
|
472
472
|
"advanced.dashboard_screenshot_engine_url.help": "URL di base del motore per gli screenshot. Lascia vuoto per il rilevamento automatico tramite Supervisor. Ha effetto immediato.",
|
|
473
473
|
"advanced.enable_websocket.label": "Attiva il WebSocket",
|
|
474
474
|
"advanced.enable_websocket.help": "Monitoraggio dello stato tramite WebSocket. Se disabilitato, il sistema passa al polling e molte funzionalità degli strumenti si riducono.",
|
|
475
|
+
"advanced.custom_instructions.label": "Istruzioni personalizzate del server",
|
|
476
|
+
"advanced.custom_instructions.help": "Testo inviato a ogni assistente IA che si connette, come parte delle istruzioni del server MCP — ad esempio dove sono conservate le note della casa e quando leggerle o aggiornarle. Fa anche parte del prompt degli agenti di conversazione di Home Assistant (Assist) che utilizzano questo set di strumenti. Usalo per indicazioni che devono raggiungere tutti i client in una volta sola; tienilo breve e privo di segreti. Lascia vuoto per non aggiungere nulla. Richiede il riavvio; i client vedono la modifica quando si riconnettono.",
|
|
475
477
|
"advanced.enabled_tool_modules.label": "Moduli di strumenti attivi",
|
|
476
478
|
"advanced.enabled_tool_modules.help": "Nomi dei moduli separati da virgola o 'all'.",
|
|
477
479
|
"advanced.enable_dashboard_partial_tools.label": "Strumenti di aggiornamento parziale delle dashboard",
|
{ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/locales/ko.json
RENAMED
|
@@ -472,6 +472,8 @@
|
|
|
472
472
|
"advanced.dashboard_screenshot_engine_url.help": "스크린샷 엔진의 기본 URL입니다. Supervisor 자동 검색을 쓰려면 비워 두세요. 즉시 적용됩니다.",
|
|
473
473
|
"advanced.enable_websocket.label": "WebSocket 사용",
|
|
474
474
|
"advanced.enable_websocket.help": "WebSocket 상태 모니터링. 비활성화하면 폴링으로 대체되며 많은 도구의 성능이 저하됩니다.",
|
|
475
|
+
"advanced.custom_instructions.label": "사용자 정의 서버 지침",
|
|
476
|
+
"advanced.custom_instructions.help": "MCP 서버 지침의 일부로 연결되는 모든 AI 어시스턴트에게 전송되는 텍스트입니다. 예를 들어 가족 메모가 보관되는 위치와 이를 읽거나 업데이트해야 하는 시기 등을 지정할 수 있습니다. 이 도구 세트를 사용하는 Home Assistant 대화 어시스턴트(Assist)의 프롬프트에도 포함됩니다. 모든 클라이언트에 한 번에 전달해야 하는 지침에 사용하고, 짧고 비밀 정보가 포함되지 않도록 유지하세요. 추가하지 않으려면 비워 두세요. 재시작이 필요하며, 클라이언트는 재연결할 때 변경 사항을 확인합니다.",
|
|
475
477
|
"advanced.enabled_tool_modules.label": "사용할 도구 모듈",
|
|
476
478
|
"advanced.enabled_tool_modules.help": "쉼표로 구분된 모듈 이름 또는 'all'.",
|
|
477
479
|
"advanced.enable_dashboard_partial_tools.label": "대시보드 부분 업데이트 도구",
|
{ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/locales/nl.json
RENAMED
|
@@ -472,6 +472,8 @@
|
|
|
472
472
|
"advanced.dashboard_screenshot_engine_url.help": "Basis-URL van de screenshot engine. Laat leeg voor Supervisor auto-ontdekking. Wordt onmiddellijk toegepast.",
|
|
473
473
|
"advanced.enable_websocket.label": "WebSocket inschakelen",
|
|
474
474
|
"advanced.enable_websocket.help": "WebSocket-statusmonitoring. Uitschakelen valt terug op pollen en degradeert veel tools.",
|
|
475
|
+
"advanced.custom_instructions.label": "Aangepaste serverinstructies",
|
|
476
|
+
"advanced.custom_instructions.help": "Tekst die naar elke verbindende AI-assistent wordt verzonden als onderdeel van de MCP-serverinstructies — bijvoorbeeld waar huishoudelijke notities worden bewaard en wanneer je deze moet lezen of bijwerken. Maakt ook deel uit van de prompt van Home Assistant-gespreksagenten (Assist) die deze toolset gebruiken. Gebruik dit voor richtlijnen die al je clients tegelijk moeten bereiken; houd het kort en vrij van geheimen. Laat leeg om niets toe te voegen. Vereist een herstart; clients zien de wijziging wanneer ze opnieuw verbinden.",
|
|
475
477
|
"advanced.enabled_tool_modules.label": "Ingeschakelde toolmodules",
|
|
476
478
|
"advanced.enabled_tool_modules.help": "Door komma's gescheiden modulenamen, of 'all'.",
|
|
477
479
|
"advanced.enable_dashboard_partial_tools.label": "Dashboard tools voor gedeeltelijke updates",
|
{ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/locales/pl.json
RENAMED
|
@@ -472,6 +472,8 @@
|
|
|
472
472
|
"advanced.dashboard_screenshot_engine_url.help": "Bazowy adres URL silnika zrzutów ekranu. Pozostaw puste dla automatycznego wykrywania przez Supervisor. Obowiązuje natychmiast.",
|
|
473
473
|
"advanced.enable_websocket.label": "Włącz WebSocket",
|
|
474
474
|
"advanced.enable_websocket.help": "Monitorowanie stanu przez WebSocket. Wyłączenie powoduje powrót do odpytywania (polling) i obniża działanie wielu narzędzi.",
|
|
475
|
+
"advanced.custom_instructions.label": "Niestandardowe instrukcje serwera",
|
|
476
|
+
"advanced.custom_instructions.help": "Tekst wysyłany do każdego łączącego się asystenta AI jako część instrukcji serwera MCP – na przykład informacja o tym, gdzie przechowywane są notatki domowe oraz kiedy je czytać lub aktualizować. Jest to również część promptu agentów konwersacyjnych Home Assistant (Assist), którzy korzystają z tego zestawu narzędzi. Użyj tej opcji do wytycznych, które powinny dotrzeć do wszystkich Twoich klientów naraz; dbaj o to, aby tekst był krótki i nie zawierał poufnych danych. Pozostaw puste pole, aby niczego nie dodawać. Wymaga ponownego uruchomienia; klienci zobaczą zmianę po ponownym połączeniu.",
|
|
475
477
|
"advanced.enabled_tool_modules.label": "Włączone moduły narzędzi",
|
|
476
478
|
"advanced.enabled_tool_modules.help": "Nazwy modułów oddzielone przecinkami lub „all”.",
|
|
477
479
|
"advanced.enable_dashboard_partial_tools.label": "Narzędzia do częściowej aktualizacji pulpitu nawigacyjnego",
|
{ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/locales/ru.json
RENAMED
|
@@ -472,6 +472,8 @@
|
|
|
472
472
|
"advanced.dashboard_screenshot_engine_url.help": "Базовый URL движка. Оставьте пустым для автопоиска через Supervisor. Действует сразу.",
|
|
473
473
|
"advanced.enable_websocket.label": "Включить WebSocket",
|
|
474
474
|
"advanced.enable_websocket.help": "Мониторинг состояния через WebSocket. Отключение переключает на опрос и ухудшает работу многих инструментов.",
|
|
475
|
+
"advanced.custom_instructions.label": "Пользовательские инструкции сервера",
|
|
476
|
+
"advanced.custom_instructions.help": "Текст, отправляемый каждому подключающемуся ИИ-ассистенту в составе инструкций MCP-сервера — например, где хранятся заметки о доме и когда их читать или обновлять. Также входит в промпт голосовых ассистентов Home Assistant (Assist), использующих этот набор инструментов. Используйте для указаний, которые должны поступать сразу ко всем клиентам; пишите кратко и без конфиденциальных данных. Оставьте пустым, чтобы ничего не добавлять. Требуется перезапуск; клиенты увидят изменения при повторном подключении.",
|
|
475
477
|
"advanced.enabled_tool_modules.label": "Включённые модули инструментов",
|
|
476
478
|
"advanced.enabled_tool_modules.help": "Имена модулей через запятую или 'all'.",
|
|
477
479
|
"advanced.enable_dashboard_partial_tools.label": "Инструменты частичного обновления панелей",
|