ha-mcp-dev 8.6.0.dev2887__tar.gz → 8.6.0.dev2889__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/PKG-INFO +1 -1
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/pyproject.toml +1 -1
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/pyproject.toml.orig +1 -1
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/config_registry.py +4 -2
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/config_settings.py +5 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/_handlers_tools.py +19 -2
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/_tools_meta.py +35 -13
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/locales/en.json +9 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/settings_js/01_i18n_state.js +1 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/settings_js/02_tools_restart.js +1 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/settings_js/03_render_save.js +26 -21
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/settings_js/04_backups.js +8 -1
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/backup.py +13 -55
- ha_mcp_dev-8.6.0.dev2889/src/ha_mcp/tools/backup_access.py +258 -0
- ha_mcp_dev-8.6.0.dev2889/src/ha_mcp/tools/bug_report_config.py +71 -0
- ha_mcp_dev-8.6.0.dev2889/src/ha_mcp/tools/dev_backup.py +84 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_bug_report.py +8 -49
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_code.py +9 -9
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_dev.py +7 -50
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_service.py +5 -5
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/LICENSE +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/README.md +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/__main__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_pypi_marker +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_rich_compat.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/requirements.txt +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/client.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/server.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_vendor/websockets/version.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/_version.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/app_discovery.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/auth/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/auth/consent_form.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/auth/oidc_compat.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/auth/provider.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/backup_manager.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/browser_landing.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/client/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/client/admin_routes.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/client/rest_client.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/client/supervisor_client.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/client/websocket_client.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/client/websocket_listener.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/config.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/config_backup.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/config_overrides.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/errors.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/ha_request_queue.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/hacs_auto_refresh.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/http_transport.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/llm_exposure.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/log_filters.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/policy/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/policy/approval_queue.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/policy/decision_pin.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/policy/decisions.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/policy/editing.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/policy/evaluator.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/policy/events.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/policy/handlers.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/policy/middleware.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/policy/model.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/policy/mrtr.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/policy/persistence.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/policy/server_channels.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/policy/value_sources.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/py.typed +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/read_only.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/redaction.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/renamed_tools.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-actions.md +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/triggers-and-conditions.md +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/server.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/server_lifespan.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/server_tool_text.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/_i18n.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/_persistence.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/_theme.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/locales/README.md +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/locales/az.json +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/locales/de.json +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/locales/es.json +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/locales/it.json +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/settings.css +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/settings.html +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/settings_js/05_feature_flags.js +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/settings_js/06_policy_cards.js +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/settings_js/07_policy_actions.js +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/settings_js/08_advanced.js +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/settings_js/09_prefs_visibility.js +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/smoke_test.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/strict_bps.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tool_dispatch.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/area_messages.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/auto_backup.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/best_practice_checker.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/best_practice_result.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/best_practice_variables.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/blueprint_sources.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/blueprint_write.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/bug_report_templates.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/bulk_selector.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/coercion.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/component_api.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/component_config_entries.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/component_config_reads.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/component_devices.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/component_helper_collections.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/component_registries.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/config_entry_flow.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/config_entry_identity.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/config_helpers/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/config_helpers/create.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/config_helpers/flow.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/config_helpers/listing.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/config_helpers/registry.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/config_helpers/schemas.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/config_helpers/typed_config.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/config_helpers/update.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/config_helpers/validation.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/config_write_helpers.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/dashboard_list_checks.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/device_control.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/device_enrichment.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/diagnostics_helpers.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/entity_param_parsing.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/entity_registration.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/entity_update_fields.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/error_log_parsing.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/hacs_registration.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/helpers.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/log_common.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/log_sources.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/log_sources_fault.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/radio/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/radio/base.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/radio/matter.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/radio/thread.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/radio/zigbee.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/radio/zwave.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/reference_validator.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/registry.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/response_helpers.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/scene_discovery.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/search/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/search/base.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/search/component.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/search/entities.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/search/legacy.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/search/modes.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/search/overview.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/search/response.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/search/state.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/smart_search/_base.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/smart_search/_config.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tool_hints.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_addons.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_areas.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_blueprints.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_calendar.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_camera.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_categories.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_config_automations.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_energy.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_entities.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_filesystem.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_groups.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_hacs.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_history.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_integrations.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_labels.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_logs.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_radio.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_registry.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_resources.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_search.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_security_policy.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_services.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_system.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_themes.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_todo.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_traces.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_updates.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_utility.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/tools_zones.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/util_helpers.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/validation_middleware.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/tools/ws_waiters.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/transforms/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/transforms/categorized_search.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/transforms/component_helpers.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/transforms/component_search.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/transforms/write_tool_note.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/transport_security.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/update_check.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/utils/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/utils/config_hash.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/utils/config_write_lock.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/utils/dashboard_patch.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/utils/data_paths.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/utils/domain_handlers.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/utils/entity_membership.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/utils/fuzzy_search.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/utils/mcp_client_host.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/utils/operation_manager.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/utils/python_sandbox.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/utils/registry_update_lock.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/utils/skill_loader.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/utils/usage_logger.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/visibility/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/visibility/enforcement.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/visibility/model.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/visibility/persistence.py +0 -0
- {ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/visibility/resolver.py +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "uv_build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "ha-mcp-dev"
|
|
7
|
-
version = "8.6.0.
|
|
7
|
+
version = "8.6.0.dev2889"
|
|
8
8
|
description = "Home Assistant MCP Server - Complete control of Home Assistant through MCP"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.13,<3.15"
|
|
@@ -4,7 +4,7 @@ build-backend = "uv_build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "ha-mcp-dev"
|
|
7
|
-
version = "8.6.0.
|
|
7
|
+
version = "8.6.0.dev2889"
|
|
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
|
|
@@ -457,12 +457,12 @@ ADDON_SYNCED_ADVANCED_FIELDS: tuple[str, ...] = (
|
|
|
457
457
|
)
|
|
458
458
|
|
|
459
459
|
|
|
460
|
-
#
|
|
460
|
+
# Backup runtime-editable fields (#1288 web UI editor). Each entry
|
|
461
461
|
# is (field_name, env_var_name, python_type). The web UI's
|
|
462
462
|
# /api/settings/backups/config GET/POST endpoints iterate this tuple to
|
|
463
463
|
# advertise per-field origin (env / addon / file / default) and to
|
|
464
464
|
# validate incoming writes. Keep aligned with the matching ``Settings``
|
|
465
|
-
# fields above — adding a
|
|
465
|
+
# fields above — adding a runtime-editable setting means a new
|
|
466
466
|
# tuple entry plus matching addon ``config.yaml`` schema mirror.
|
|
467
467
|
BACKUP_OVERRIDE_FIELDS: tuple[BackupOverrideField, ...] = (
|
|
468
468
|
BackupOverrideField("enable_auto_backup", "ENABLE_AUTO_BACKUP", bool),
|
|
@@ -478,6 +478,8 @@ BACKUP_OVERRIDE_FIELDS: tuple[BackupOverrideField, ...] = (
|
|
|
478
478
|
"HAMCP_AUTO_BACKUP_CALENDAR_LOOKAHEAD_DAYS",
|
|
479
479
|
int,
|
|
480
480
|
),
|
|
481
|
+
BackupOverrideField("enable_snapshot_actions", "ENABLE_SNAPSHOT_ACTIONS", bool),
|
|
482
|
+
BackupOverrideField("backup_read_only", "BACKUP_READ_ONLY", bool),
|
|
481
483
|
BackupOverrideField("enable_snapshot_delete", "ENABLE_SNAPSHOT_DELETE", bool),
|
|
482
484
|
BackupOverrideField(
|
|
483
485
|
"snapshot_delete_min_age_days", "SNAPSHOT_DELETE_MIN_AGE_DAYS", int
|
|
@@ -425,6 +425,11 @@ class Settings(BaseSettings):
|
|
|
425
425
|
7, ge=1, le=365, alias="HAMCP_AUTO_BACKUP_CALENDAR_LOOKAHEAD_DAYS"
|
|
426
426
|
)
|
|
427
427
|
|
|
428
|
+
# Human-managed controls for explicit backup tool operations. Automatic
|
|
429
|
+
# pre-edit capture follows enable_auto_backup independently.
|
|
430
|
+
enable_snapshot_actions: bool = Field(True, alias="ENABLE_SNAPSHOT_ACTIONS")
|
|
431
|
+
backup_read_only: bool = Field(False, alias="BACKUP_READ_ONLY")
|
|
432
|
+
|
|
428
433
|
# Snapshot-tarball deletion gate (#1861). Off by default: an agent
|
|
429
434
|
# deleting a full HA snapshot is categorically riskier than the
|
|
430
435
|
# lightweight `edits`-scope auto-backups (which already delete freely),
|
{ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/_handlers_tools.py
RENAMED
|
@@ -25,6 +25,8 @@ from ._tools_meta import (
|
|
|
25
25
|
BPS_MANDATORY_TOOLS,
|
|
26
26
|
_get_tool_metadata,
|
|
27
27
|
gate_is_beta,
|
|
28
|
+
ignored_disabled_tools,
|
|
29
|
+
tool_config_warnings,
|
|
28
30
|
)
|
|
29
31
|
|
|
30
32
|
if TYPE_CHECKING:
|
|
@@ -87,11 +89,10 @@ def _bps_locked_tools() -> list[str]:
|
|
|
87
89
|
if not (settings.enable_mandatory_bps and settings.enable_strict_mandatory_bps):
|
|
88
90
|
return []
|
|
89
91
|
except Exception:
|
|
90
|
-
logger.
|
|
92
|
+
logger.exception(
|
|
91
93
|
"settings lookup failed while computing BPS-locked tools; "
|
|
92
94
|
"locking %s conservatively",
|
|
93
95
|
", ".join(sorted(BPS_MANDATORY_TOOLS)),
|
|
94
|
-
exc_info=True,
|
|
95
96
|
)
|
|
96
97
|
return sorted(BPS_MANDATORY_TOOLS)
|
|
97
98
|
|
|
@@ -114,6 +115,21 @@ def _stub_gate_is_beta(tool: dict[str, Any]) -> bool:
|
|
|
114
115
|
return bool(declared)
|
|
115
116
|
|
|
116
117
|
|
|
118
|
+
def _ignored_disable_diagnostics(config: dict[str, Any]) -> dict[str, Any]:
|
|
119
|
+
"""Allow the Tools page to retain its conservative BPS lock on lookup errors."""
|
|
120
|
+
from ..config import get_global_settings
|
|
121
|
+
|
|
122
|
+
try:
|
|
123
|
+
settings = get_global_settings()
|
|
124
|
+
return {
|
|
125
|
+
"ignored_disabled_tools": ignored_disabled_tools(config, settings),
|
|
126
|
+
"tool_config_warnings": tool_config_warnings(config, settings),
|
|
127
|
+
}
|
|
128
|
+
except Exception:
|
|
129
|
+
logger.exception("Failed to read settings for mandatory-disable diagnostics")
|
|
130
|
+
return {"ignored_disabled_tools": None, "tool_config_warnings": None}
|
|
131
|
+
|
|
132
|
+
|
|
117
133
|
def _env_pinned_conflicts(
|
|
118
134
|
states: dict[str, str], env_pinned: dict[str, str]
|
|
119
135
|
) -> list[str]:
|
|
@@ -189,6 +205,7 @@ async def _get_tools(
|
|
|
189
205
|
"tools": tools,
|
|
190
206
|
"states": states,
|
|
191
207
|
"env_pinned": pinned,
|
|
208
|
+
**_ignored_disable_diagnostics(config),
|
|
192
209
|
"read_only_exempt": sorted(READ_ONLY_EXEMPT_TOOLS),
|
|
193
210
|
"llm_api": llm_effective,
|
|
194
211
|
"llm_api_overrides": llm_overrides,
|
|
@@ -138,6 +138,39 @@ def effective_mandatory_tools(settings: Settings) -> set[str]:
|
|
|
138
138
|
return set(MANDATORY_TOOLS)
|
|
139
139
|
|
|
140
140
|
|
|
141
|
+
def ignored_disabled_tools(config: dict[str, Any], settings: Settings) -> list[str]:
|
|
142
|
+
"""Return mandatory tools whose requested disable state is ignored."""
|
|
143
|
+
mandatory = effective_mandatory_tools(settings)
|
|
144
|
+
return sorted(
|
|
145
|
+
name
|
|
146
|
+
for name, state in config.get("tools", {}).items()
|
|
147
|
+
if state == "disabled" and name in mandatory
|
|
148
|
+
)
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
def mandatory_disable_warning(name: str) -> str:
|
|
152
|
+
"""Explain the ignored request, including the strict BPS dependency."""
|
|
153
|
+
warning = (
|
|
154
|
+
f"Ignoring disabled_tools entry '{name}': "
|
|
155
|
+
"this tool is mandatory and remains enabled."
|
|
156
|
+
)
|
|
157
|
+
if name in BPS_MANDATORY_TOOLS:
|
|
158
|
+
warning += (
|
|
159
|
+
" Strict best-practices mode (enable_strict_mandatory_bps) is on "
|
|
160
|
+
"and publishes its acknowledgment key only through it. "
|
|
161
|
+
"Turn strict mode off first to disable the tool."
|
|
162
|
+
)
|
|
163
|
+
return warning
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
def tool_config_warnings(config: dict[str, Any], settings: Settings) -> list[str]:
|
|
167
|
+
"""Share mandatory disable warnings across startup, settings, and reports."""
|
|
168
|
+
return [
|
|
169
|
+
mandatory_disable_warning(name)
|
|
170
|
+
for name in ignored_disabled_tools(config, settings)
|
|
171
|
+
]
|
|
172
|
+
|
|
173
|
+
|
|
141
174
|
# Tools created by FastMCP transforms (not registered through
|
|
142
175
|
# local_provider). No transform-generated tools are currently in use —
|
|
143
176
|
# ``ha_get_skill_guide`` is registered the normal way and is visible
|
|
@@ -400,19 +433,8 @@ def apply_tool_visibility(
|
|
|
400
433
|
disabled_names.add("ha_config_set_yaml")
|
|
401
434
|
|
|
402
435
|
mandatory = effective_mandatory_tools(settings)
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
# The save handlers reject this combination, but env seeds and
|
|
406
|
-
# hand-edited tool_config.json bypass them — keep the tool on and
|
|
407
|
-
# say why, rather than silently locking out every strict-gated
|
|
408
|
-
# write (the acknowledgment key is published only through it).
|
|
409
|
-
logger.warning(
|
|
410
|
-
"Keeping %s enabled despite a disable entry: strict "
|
|
411
|
-
"best-practices mode (enable_strict_mandatory_bps) is on and "
|
|
412
|
-
"publishes its acknowledgment key only through it. Turn "
|
|
413
|
-
"strict mode off first to disable the tool.",
|
|
414
|
-
", ".join(sorted(stripped_bps)),
|
|
415
|
-
)
|
|
436
|
+
for warning in tool_config_warnings(config, settings):
|
|
437
|
+
logger.warning("%s", warning)
|
|
416
438
|
disabled_names -= mandatory
|
|
417
439
|
|
|
418
440
|
if disabled_names:
|
{ha_mcp_dev-8.6.0.dev2887 → ha_mcp_dev-8.6.0.dev2889}/src/ha_mcp/settings_ui/locales/en.json
RENAMED
|
@@ -234,6 +234,7 @@
|
|
|
234
234
|
"tools.notes.beta_disabled": "Beta. Set {setting} in the dev app (add-on) config or matching environment variable (see docs/beta.md).",
|
|
235
235
|
"tools.notes.env_pinned": "Pinned by {variable}. Unset the environment variable to edit here.",
|
|
236
236
|
"tools.notes.bps_locked": "Locked while Strict best-practices mode is on. Turn that setting off first to disable this tool.",
|
|
237
|
+
"tools.notes.mandatory_disabled_ignored": "Disable request ignored: this tool is mandatory and remains enabled.",
|
|
237
238
|
"tools.notes.read_only_off": "Off. Read Only Mode is on; write tools are disabled.",
|
|
238
239
|
"tools.notes.read_only_partial": "Read Only Mode: write operations of this tool are blocked; read operations stay available.",
|
|
239
240
|
"tools.llm_api.label": "LLM API",
|
|
@@ -253,6 +254,10 @@
|
|
|
253
254
|
"tools.read_only.save_failed": "Read Only Mode change did not save. The server still has the previous value.",
|
|
254
255
|
"backup.fields.enable_auto_backup.label": "Auto-backup edits",
|
|
255
256
|
"backup.fields.enable_auto_backup.help": "Capture a snapshot before every wrapped write or destructive tool call.",
|
|
257
|
+
"backup.fields.enable_snapshot_actions.label": "Allow full HA snapshot actions",
|
|
258
|
+
"backup.fields.enable_snapshot_actions.help": "Allow AI assistants to manage full Home Assistant snapshots through ha_manage_backup and the equivalent backup services and commands in ha_call_service. Turning this off blocks every snapshot action, including listing. Snapshot deletion is only available through ha_manage_backup and also requires Allow snapshot deletion. Edit backups and human actions in this page remain available.",
|
|
259
|
+
"backup.fields.backup_read_only.label": "Make backup management read-only",
|
|
260
|
+
"backup.fields.backup_read_only.help": "Allow AI assistants to list, view, and diff edit backups, and list full HA snapshots when snapshot actions are enabled. Block manual backup create, restore (including edit restores), and delete, including the equivalent backup services and commands in ha_call_service. Automatic pre-edit backups continue. Human actions in this page remain available.",
|
|
256
261
|
"backup.fields.auto_backup_throttle_minutes.label": "Throttle (minutes)",
|
|
257
262
|
"backup.fields.auto_backup_throttle_minutes.help": "Per-entity throttle. 0 = every write; N > 0 = at most one backup per N minutes. Range 0–1440.",
|
|
258
263
|
"backup.fields.auto_backup_retain_per_entity.label": "Retain per entity",
|
|
@@ -495,6 +500,10 @@
|
|
|
495
500
|
"addon.enable_security_policy_tool.name": "Let AI agents edit tool security policies",
|
|
496
501
|
"addon.enable_security_policy_tool.description": "Registers the ha_manage_security_policy tool, which lets connected AI agents read and rewrite the tool security policies — including removing approval gates. Off by default. Independent of the Tool Security Policies option above: this controls who can edit the rules, not whether they are enforced. The tool cannot see or decide pending approvals. To keep a human in the loop, gate the tool before enabling it: switch on \"security gated\" for Manage Security Policy in the Tools tab of the web UI. Requires restart to take effect.",
|
|
497
502
|
"addon.enable_auto_backup.name": "Enable auto-backup of edits",
|
|
503
|
+
"addon.enable_snapshot_actions.name": "Allow full HA snapshot actions",
|
|
504
|
+
"addon.enable_snapshot_actions.description": "Allow AI assistants to manage full Home Assistant snapshots through ha_manage_backup(scope='snapshot') and the equivalent backup services and commands in ha_call_service. Turning this off blocks every snapshot action, including listing, while edit backups remain available. Snapshot deletion is only available through ha_manage_backup, also requires enable_snapshot_delete, and its protections still apply. On by default. Change this option or use the web Settings UI Backups tab; requires restart in the app.",
|
|
505
|
+
"addon.backup_read_only.name": "Make backup management read-only",
|
|
506
|
+
"addon.backup_read_only.description": "Restrict ha_manage_backup to listing, viewing, and diffing edit backups, and listing full HA snapshots when snapshot actions are enabled. Blocks manual backup create, restore (including edit restores), and delete, including the equivalent backup services and commands in ha_call_service. Automatic pre-edit backups continue, and human actions in the web Settings UI remain available. Off by default; requires restart in the app.",
|
|
498
507
|
"addon.enable_auto_backup.description": "Captures a per-entity snapshot before every wrapped write/destructive MCP tool call (automation, script, scene, helper, dashboard, dashboard resource, label, category, group, zone, area, calendar, todo, entity, device, integration, and sibling remove/delete tools). The auto-backup throttle bounds how often that happens: 0 (default) captures on every such call, N>0 at most one snapshot per N minutes per entity. Snapshots are saved as YAML files under /data/ha_mcp_backups/ (override via HAMCP_BACKUP_DIR) and listed, restored, or deleted via the Backups tab in the web settings UI or via ha_manage_backup(scope='edits', ...). For those domains the capture is best-effort — a failure logs a WARNING and the write proceeds. The file and raw-YAML tools are the exception: ha_write_file, ha_delete_file and ha_config_set_yaml treat the snapshot as a precondition, so a write through them is refused while this is off, and a failed capture blocks it. On by default; unchecking opts out of the best-effort captures and takes the file and raw-YAML tools out of service with them. Requires restart to take effect.",
|
|
499
508
|
"addon.auto_backup_throttle_minutes.name": "Auto-backup throttle (minutes)",
|
|
500
509
|
"addon.auto_backup_throttle_minutes.description": "Per-entity throttle window. 0 (default) captures a snapshot on every wrapped write. N>0 captures at most one snapshot per N minutes per entity. Range 0–1440.",
|
|
@@ -204,6 +204,7 @@ let toolEnvPinned = {};
|
|
|
204
204
|
// Server-side saves reject the conflict too — this lock is the
|
|
205
205
|
// courteous UI half.
|
|
206
206
|
let bpsLockedTools = new Set();
|
|
207
|
+
let ignoredDisabledTools = new Set();
|
|
207
208
|
// Conversation-agent LLM API exposure (#1745). toolLlm mirrors the
|
|
208
209
|
// server-computed EFFECTIVE value per tool (user override, else the
|
|
209
210
|
// deny-by-default for beta/dev/restart tools); toolLlmOverrides holds
|
|
@@ -33,6 +33,7 @@ async function loadTools() {
|
|
|
33
33
|
toolStates = data.states || {};
|
|
34
34
|
toolEnvPinned = data.env_pinned || {};
|
|
35
35
|
bpsLockedTools = new Set(data.bps_locked_tools || []);
|
|
36
|
+
ignoredDisabledTools = new Set(data.ignored_disabled_tools || []);
|
|
36
37
|
toolLlm = data.llm_api || {};
|
|
37
38
|
toolLlmOverrides = data.llm_api_overrides || {};
|
|
38
39
|
llmApiAvailable = !!data.llm_api_available;
|
|
@@ -16,7 +16,7 @@ function isReadOnlyForcedOff(t) {
|
|
|
16
16
|
const ann = t.annotations || {};
|
|
17
17
|
if (ann.readOnlyHint === true) return false;
|
|
18
18
|
if (READ_ONLY_EXEMPT.has(t.name)) return false;
|
|
19
|
-
if (MANDATORY.includes(t.name)) return false;
|
|
19
|
+
if (MANDATORY.includes(t.name) || bpsLockedTools.has(t.name)) return false;
|
|
20
20
|
return true;
|
|
21
21
|
}
|
|
22
22
|
|
|
@@ -81,11 +81,11 @@ function render() {
|
|
|
81
81
|
!isReadOnlyForcedOff(t));
|
|
82
82
|
const anyEnabled = toggleable.some(t => getState(t.name) !== 'disabled');
|
|
83
83
|
const groupEnabled = tools.filter(t => {
|
|
84
|
+
if (MANDATORY.includes(t.name) || bpsLockedTools.has(t.name)) return true;
|
|
84
85
|
if (isReadOnlyForcedOff(t)) return false;
|
|
85
86
|
if (toolEnvPinned[t.name]) return toolEnvPinned[t.name] !== 'disabled';
|
|
86
87
|
const s = getState(t.name);
|
|
87
|
-
return
|
|
88
|
-
(!t.disabled_by && s !== 'disabled');
|
|
88
|
+
return !t.disabled_by && s !== 'disabled';
|
|
89
89
|
}).length;
|
|
90
90
|
|
|
91
91
|
// Master-switch checked state. Normally it mirrors "any toggleable tool
|
|
@@ -168,8 +168,8 @@ function render() {
|
|
|
168
168
|
const isFeatureGated = disabledBy !== null;
|
|
169
169
|
// env_pinned: "disabled" | "pinned" | undefined — operator-level lock
|
|
170
170
|
// via DISABLED_TOOLS / PINNED_TOOLS env vars. When set, all inputs are
|
|
171
|
-
// disabled and a banner names the env var.
|
|
172
|
-
//
|
|
171
|
+
// disabled and a banner names the env var. Mandatory tools stay on
|
|
172
|
+
// regardless, while the requested state remains intact for saves.
|
|
173
173
|
const envPinKind = toolEnvPinned[t.name]; // "disabled" | "pinned" | undefined
|
|
174
174
|
const isEnvPinned = !!envPinKind;
|
|
175
175
|
const envPinVar = envPinKind === 'disabled' ? 'DISABLED_TOOLS' :
|
|
@@ -185,22 +185,18 @@ function render() {
|
|
|
185
185
|
const roForcedOff = isReadOnlyForcedOff(t);
|
|
186
186
|
const roExemptActive = readOnlyState.enabled && READ_ONLY_EXEMPT.has(t.name);
|
|
187
187
|
|
|
188
|
-
|
|
189
|
-
if (roForcedOff) disabledCount++;
|
|
190
|
-
else if (isEnvPinned) {
|
|
191
|
-
if (envPinKind === 'disabled') disabledCount++;
|
|
192
|
-
else { enabledCount++; pinnedCount++; }
|
|
193
|
-
} else if (isFeatureGated) disabledCount++;
|
|
194
|
-
else if (state === 'disabled') disabledCount++;
|
|
195
|
-
else if (state === 'pinned') { enabledCount++; pinnedCount++; }
|
|
196
|
-
else enabledCount++;
|
|
197
|
-
|
|
198
|
-
const isEnabled = roForcedOff ? false : (isEnvPinned
|
|
188
|
+
const isEnabled = isMandatory || (roForcedOff ? false : (isEnvPinned
|
|
199
189
|
? (envPinKind !== 'disabled')
|
|
200
|
-
: (isFeatureGated ? false :
|
|
201
|
-
const isPinned = roForcedOff ? false : (isEnvPinned
|
|
190
|
+
: (isFeatureGated ? false : state !== 'disabled')));
|
|
191
|
+
const isPinned = isMandatory ? (DEFAULT_PINNED.includes(t.name) || state === 'pinned' || envPinKind === 'pinned') : (roForcedOff ? false : (isEnvPinned
|
|
202
192
|
? (envPinKind === 'pinned')
|
|
203
|
-
: (isFeatureGated ? false : (
|
|
193
|
+
: (isFeatureGated ? false : (state === 'pinned' || DEFAULT_PINNED.includes(t.name)))));
|
|
194
|
+
total++;
|
|
195
|
+
if (!isEnabled) disabledCount++;
|
|
196
|
+
else {
|
|
197
|
+
enabledCount++;
|
|
198
|
+
if (isPinned) pinnedCount++;
|
|
199
|
+
}
|
|
204
200
|
const lockEnabled = roForcedOff || isEnvPinned || isMandatory || isFeatureGated;
|
|
205
201
|
const lockPinned = roForcedOff || isEnvPinned || isMandatory || isFeatureGated || !isEnabled;
|
|
206
202
|
// The security gate is a policy RULE keyed by tool name, so it can be
|
|
@@ -250,7 +246,16 @@ function render() {
|
|
|
250
246
|
)
|
|
251
247
|
}</div>`
|
|
252
248
|
: '';
|
|
253
|
-
const
|
|
249
|
+
const ignoredDisable = isMandatory && (ignoredDisabledTools.has(t.name) ||
|
|
250
|
+
state === 'disabled' || envPinKind === 'disabled');
|
|
251
|
+
const ignoredDisableNote = ignoredDisable
|
|
252
|
+
? `<div class="feature-locked-note">${escapeHtml(tr(
|
|
253
|
+
'tools.notes.mandatory_disabled_ignored',
|
|
254
|
+
{},
|
|
255
|
+
'Disable request ignored: this tool is mandatory and remains enabled.'
|
|
256
|
+
))}</div>`
|
|
257
|
+
: '';
|
|
258
|
+
const envPinnedNote = isEnvPinned && !ignoredDisable
|
|
254
259
|
? `<div class="feature-locked-note">${tHtml(
|
|
255
260
|
'tools.notes.env_pinned',
|
|
256
261
|
{variable: `<code>${escapeHtml(envPinVar)}</code>`},
|
|
@@ -297,6 +302,7 @@ function render() {
|
|
|
297
302
|
(desc ? `<div class="tool-desc">${escapeHtml(desc)}</div>` : '') +
|
|
298
303
|
gatedNote +
|
|
299
304
|
envPinnedNote +
|
|
305
|
+
ignoredDisableNote +
|
|
300
306
|
bpsLockedNote +
|
|
301
307
|
readOnlyNote +
|
|
302
308
|
`</div>` +
|
|
@@ -581,4 +587,3 @@ function applyToolSearch() {
|
|
|
581
587
|
document.getElementById('search').addEventListener('input', applyToolSearch);
|
|
582
588
|
|
|
583
589
|
document.getElementById('restartBtn').addEventListener('click', restartAddon);
|
|
584
|
-
|
|
@@ -3,6 +3,14 @@ let backupEntries = [];
|
|
|
3
3
|
let backupConfigFields = [];
|
|
4
4
|
|
|
5
5
|
const BACKUP_FIELD_LABELS = {
|
|
6
|
+
enable_snapshot_actions: {
|
|
7
|
+
label: 'Allow full HA snapshot actions',
|
|
8
|
+
help: 'Allow AI assistants to manage full Home Assistant snapshots through ha_manage_backup. Turning this off blocks every snapshot action, including listing. Snapshot deletion also requires Allow snapshot deletion. Edit backups and human actions in this page remain available.',
|
|
9
|
+
},
|
|
10
|
+
backup_read_only: {
|
|
11
|
+
label: 'Make backup management read-only',
|
|
12
|
+
help: 'Allow AI assistants to list, view, and diff edit backups, and list full HA snapshots when snapshot actions are enabled. Block manual backup create, restore (including edit restores), and delete. Automatic pre-edit backups continue. Human actions in this page remain available.',
|
|
13
|
+
},
|
|
6
14
|
enable_auto_backup: {
|
|
7
15
|
label: 'Auto-backup edits',
|
|
8
16
|
help: 'Capture a snapshot before every wrapped write/destructive tool call.',
|
|
@@ -636,4 +644,3 @@ document.getElementById('modalBackdrop').addEventListener('click', (e) => {
|
|
|
636
644
|
});
|
|
637
645
|
|
|
638
646
|
document.getElementById('stopSidecarBtn').addEventListener('click', stopSidecar);
|
|
639
|
-
|
|
@@ -43,6 +43,15 @@ from ..client.rest_client import (
|
|
|
43
43
|
from ..client.websocket_client import HomeAssistantWebSocketClient, get_websocket_client
|
|
44
44
|
from ..config import get_global_settings
|
|
45
45
|
from ..errors import ErrorCode, create_error_response
|
|
46
|
+
from .backup_access import (
|
|
47
|
+
gate_backup_combo as _gate_combo,
|
|
48
|
+
)
|
|
49
|
+
from .backup_access import (
|
|
50
|
+
require_backup_access,
|
|
51
|
+
)
|
|
52
|
+
from .backup_access import (
|
|
53
|
+
require_backup_param as _require,
|
|
54
|
+
)
|
|
46
55
|
from .component_api import (
|
|
47
56
|
component_supports,
|
|
48
57
|
get_component_caps,
|
|
@@ -1563,60 +1572,6 @@ async def _execute_snapshot_delete(
|
|
|
1563
1572
|
}
|
|
1564
1573
|
|
|
1565
1574
|
|
|
1566
|
-
# Valid (scope, action) combinations. Anything outside this set is
|
|
1567
|
-
# rejected with a structured VALIDATION_INVALID_PARAMETER error.
|
|
1568
|
-
_VALID_COMBOS: set[tuple[str, str]] = {
|
|
1569
|
-
("snapshot", "create"),
|
|
1570
|
-
("snapshot", "list"),
|
|
1571
|
-
("snapshot", "restore"),
|
|
1572
|
-
("snapshot", "delete"),
|
|
1573
|
-
("edits", "create"),
|
|
1574
|
-
("edits", "list"),
|
|
1575
|
-
("edits", "view"),
|
|
1576
|
-
("edits", "diff"),
|
|
1577
|
-
("edits", "restore"),
|
|
1578
|
-
("edits", "delete"),
|
|
1579
|
-
}
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
def _gate_combo(scope: str, action: str) -> None:
|
|
1583
|
-
"""Reject (scope, action) combinations that do not exist.
|
|
1584
|
-
|
|
1585
|
-
Strong gating defends against the LLM accidentally routing "restore
|
|
1586
|
-
my automation" through ``(snapshot, restore)`` (which would restart
|
|
1587
|
-
HA). The error response lists every legal combo so the LLM can
|
|
1588
|
-
self-correct on the next call.
|
|
1589
|
-
"""
|
|
1590
|
-
if (scope, action) in _VALID_COMBOS:
|
|
1591
|
-
return
|
|
1592
|
-
raise_tool_error(
|
|
1593
|
-
create_error_response(
|
|
1594
|
-
ErrorCode.VALIDATION_INVALID_PARAMETER,
|
|
1595
|
-
f"Invalid combination: scope={scope!r}, action={action!r}",
|
|
1596
|
-
context={"scope": scope, "action": action},
|
|
1597
|
-
suggestions=[
|
|
1598
|
-
"Valid combinations: "
|
|
1599
|
-
+ ", ".join(sorted(f"({s},{a})" for s, a in _VALID_COMBOS)),
|
|
1600
|
-
"scope='snapshot' is for full HA tarball backups (heavy, restart on restore)",
|
|
1601
|
-
"scope='edits' is for per-entity auto-backups produced by write tools (lightweight)",
|
|
1602
|
-
],
|
|
1603
|
-
)
|
|
1604
|
-
)
|
|
1605
|
-
|
|
1606
|
-
|
|
1607
|
-
def _require(param_name: str, value: Any, scope: str, action: str) -> Any:
|
|
1608
|
-
"""Validate a required parameter for the picked (scope, action) cell."""
|
|
1609
|
-
if value is None or (isinstance(value, str) and not value.strip()):
|
|
1610
|
-
raise_tool_error(
|
|
1611
|
-
create_error_response(
|
|
1612
|
-
ErrorCode.VALIDATION_INVALID_PARAMETER,
|
|
1613
|
-
f"{param_name!r} is required for scope={scope!r}, action={action!r}",
|
|
1614
|
-
context={"scope": scope, "action": action, "missing_param": param_name},
|
|
1615
|
-
)
|
|
1616
|
-
)
|
|
1617
|
-
return value
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
1575
|
def register_backup_tools(
|
|
1621
1576
|
mcp: "FastMCP", client: HomeAssistantClient, **kwargs: Any
|
|
1622
1577
|
) -> None:
|
|
@@ -1659,6 +1614,8 @@ refused if: the target is a scheduled/automatic backup; it's younger than
|
|
|
1659
1614
|
newest snapshot remaining. These guarantee at least one recovery point always
|
|
1660
1615
|
survives an agent's own mistakes.
|
|
1661
1616
|
|
|
1617
|
+
**Human-managed backup controls:** `enable_snapshot_actions=false` (ENABLE_SNAPSHOT_ACTIONS) blocks every snapshot action, including listing. `backup_read_only=true` (BACKUP_READ_ONLY) allows edits list/view/diff and snapshot list when snapshots are enabled; it blocks explicit create/restore/delete in both scopes. Automatic pre-edit capture still follows `enable_auto_backup`. A human must change these controls in the Backups tab, app configuration, or environment; developer tools cannot change them. Global and connection Read Only Mode still restrict writes.
|
|
1618
|
+
|
|
1662
1619
|
**`enable_auto_backup` and `scope="edits"`:** the automatic-on-write capture (every wrapped tool call) is gated by `enable_auto_backup=true` — if the listing is empty, check the toggle (web settings UI or `ENABLE_AUTO_BACKUP=true` env var). The explicit `(edits, create)` action bypasses the toggle since the request is explicit; `list` / `view` / `restore` / `delete` operate on whatever's already on disk regardless of the toggle's current state.
|
|
1663
1620
|
|
|
1664
1621
|
**Template filters:** `edits.create` accepts a Template entity ID and returns its stable config-entry ID as `entity_id`. Use that returned ID for `edits.list` and bulk `edits.delete`; those filters do not resolve entity aliases. After recreation, the restore result reports the replacement config-entry ID and `entity_id_mapping` separately.
|
|
@@ -1776,6 +1733,8 @@ survives an agent's own mistakes.
|
|
|
1776
1733
|
) -> dict[str, Any]:
|
|
1777
1734
|
"""Polymorphic backup tool. See the tool description for the routing matrix."""
|
|
1778
1735
|
_gate_combo(scope, action)
|
|
1736
|
+
settings = get_global_settings()
|
|
1737
|
+
require_backup_access(settings, scope, action)
|
|
1779
1738
|
|
|
1780
1739
|
if scope == "snapshot":
|
|
1781
1740
|
return await _dispatch_snapshot_action(
|
|
@@ -1791,7 +1750,6 @@ survives an agent's own mistakes.
|
|
|
1791
1750
|
)
|
|
1792
1751
|
|
|
1793
1752
|
# scope == "edits"
|
|
1794
|
-
settings = get_global_settings()
|
|
1795
1753
|
mgr = get_backup_manager(client, settings)
|
|
1796
1754
|
return await _dispatch_edits_action(
|
|
1797
1755
|
mgr,
|