ha-mcp-dev 9.2.0.dev3491__tar.gz → 9.3.0.dev3492__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/PKG-INFO +5 -7
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/README.md +2 -2
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/pyproject.toml +8 -5
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/pyproject.toml.orig +14 -9
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/__init__.py +17 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/__main__.py +11 -26
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_rich_compat.py +1 -1
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/auth/consent_form.py +1 -1
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/backup_calendar.py +1 -1
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/backup_manager.py +1 -1
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/client/rest_client.py +2 -2
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/client/websocket_client.py +5 -5
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/config.py +2 -2
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/config_backup.py +3 -3
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/config_overrides.py +7 -7
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/config_settings.py +1 -1
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/dashboard_screenshot/capture.py +2 -2
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/dashboard_screenshot/paths.py +1 -1
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/log_filters.py +1 -1
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/policy/decision_pin.py +2 -2
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/policy/handlers.py +3 -3
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/policy/model.py +1 -1
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/policy/persistence.py +1 -1
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/settings_ui/_handlers_advanced.py +1 -1
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/settings_ui/_handlers_backups.py +2 -2
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/settings_ui/_handlers_fs.py +1 -1
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/settings_ui/_handlers_oauth_callbacks.py +1 -1
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/settings_ui/_handlers_server.py +3 -3
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/settings_ui/_handlers_theme.py +1 -1
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/settings_ui/_handlers_tools.py +1 -1
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/settings_ui/_supervisor.py +1 -1
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/settings_ui/_theme.py +1 -1
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/stdio_settings_sidecar.py +1 -1
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tool_dispatch.py +1 -1
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/auto_backup.py +2 -2
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/backup.py +1 -1
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/blueprint_sources.py +1 -1
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/component_api.py +1 -1
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/config_helpers/icon_route.py +1 -1
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/config_helpers/registry.py +2 -2
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/config_write_helpers.py +1 -1
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/dashboard_edit_errors.py +1 -1
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/dashboard_read_errors.py +1 -1
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/device_control.py +2 -2
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/diagnostics_helpers.py +1 -1
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/flow_helper_lookup.py +1 -1
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/hacs_own_repository.py +1 -1
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/helpers.py +2 -2
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/history_response.py +1 -1
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/resource_codec.py +1 -1
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/response_helpers.py +1 -1
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/tools_addons.py +5 -5
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/tools_areas.py +1 -1
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/tools_bug_report.py +2 -6
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/tools_code.py +2 -2
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/tools_config_dashboards.py +13 -13
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/tools_config_scenes.py +1 -1
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/tools_energy.py +1 -1
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/tools_labels.py +1 -1
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/tools_traces.py +1 -1
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/tools_updates.py +3 -3
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/tools_yaml_read.py +1 -1
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/ws_waiters.py +3 -3
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/update_check.py +0 -29
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/utils/mcp_client_host.py +2 -2
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/utils/python_sandbox.py +1 -1
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/utils/usage_logger.py +1 -1
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/visibility/enforcement.py +2 -2
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/LICENSE +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_pypi_marker +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev_security.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/client/mixins/skills.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/jev_search.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/mixins/extensions.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/skills/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/skills/_constants.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/skills/_resources.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/skills/_snapshot.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/skills/_source.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/skills/client.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/skills/extension.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/skills/models.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/shared/_request_clock.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/requirements.txt +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/client.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/server.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_vendor/websockets/version.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/_version.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/app_discovery.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/auth/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/auth/iss_stamp.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/auth/oidc_compat.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/auth/provider.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/backup_dashboards.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/backup_diff.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/backup_entities.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/backup_entity_ids.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/backup_files.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/backup_helper_target.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/backup_integrations.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/backup_tags.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/backup_todo.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/backup_zones.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/browser_landing.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/client/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/client/admin_routes.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/client/config_entry_read.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/client/error_log_journald.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/client/event_listeners.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/client/models.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/client/supervisor_client.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/client/websocket_listener.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/client/websocket_state.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/config_meta.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/config_registry.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/dashboard_screenshot/engine_compat.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/dashboard_screenshot/theme_check.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/errors.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/ha_request_queue.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/hacs_auto_refresh.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/http_transport.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/image_info.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/ipv6_lan_guard.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/listen_sockets.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/llm_exposure.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/mcp_client_context.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/policy/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/policy/approval_queue.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/policy/decisions.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/policy/editing.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/policy/evaluator.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/policy/events.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/policy/middleware.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/policy/mrtr.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/policy/server_channels.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/policy/value_sources.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/py.typed +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/read_only.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/redaction.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/renamed_tools.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-actions.md +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/triggers-and-conditions.md +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/server.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/server_instructions.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/server_lifespan.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/server_tool_text.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/settings_ui/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/settings_ui/_i18n.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/settings_ui/_persistence.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/settings_ui/locales/README.md +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/settings_ui/locales/az.json +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/settings_ui/locales/de.json +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/settings_ui/locales/en.json +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/settings_ui/locales/es.json +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/settings_ui/locales/hu.json +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/settings_ui/locales/it.json +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/settings_ui/settings.css +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/settings_ui/settings.html +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/settings_ui/settings_js/01_i18n_state.js +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/settings_ui/settings_js/02_tools_restart.js +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/settings_ui/settings_js/03_render_save.js +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/settings_ui/settings_js/04_backups.js +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/settings_ui/settings_js/05_feature_flags.js +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/settings_ui/settings_js/06_policy_cards.js +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/settings_ui/settings_js/07_policy_actions.js +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/settings_ui/settings_js/08_advanced.js +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/settings_ui/settings_js/09_prefs_visibility.js +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/settings_ui/settings_js/10_oauth_callbacks.js +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/smoke_test.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/storage_helper_types.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/strict_bps.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tool_catalog.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/addon_connection_hints.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/area_messages.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/automation_errors.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/automation_registry_details.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/backup_access.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/backup_on_demand.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/backup_snapshot.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/backup_snapshot_restore.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/best_practice_checker.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/best_practice_result.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/best_practice_variables.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/blueprint_write.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/bug_report_config.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/bug_report_redaction.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/bug_report_sources.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/bug_report_templates.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/bulk_selector.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/coercion.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/component_automation.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/component_config_entries.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/component_config_reads.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/component_devices.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/component_flow.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/component_helper_collections.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/component_registries.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/component_todo.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/config_entry_backup.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/config_entry_flow.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/config_entry_flow_errors.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/config_entry_flow_introspect.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/config_entry_flow_progress.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/config_entry_flow_submit.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/config_entry_identity.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/config_file_visibility.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/config_helpers/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/config_helpers/core_payload.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/config_helpers/create.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/config_helpers/describe.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/config_helpers/flow.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/config_helpers/listing.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/config_helpers/schemas.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/config_helpers/typed_config.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/config_helpers/update.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/config_helpers/validation.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/config_subentry_restore.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/config_write_errors.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/core_contract.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/dashboard_card_describe.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/dashboard_list_checks.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/dev_backup.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/device_enrichment.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/energy_preferences.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/entity_expose_batch.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/entity_param_parsing.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/entity_registration.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/entity_removal.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/entity_update_fields.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/error_log_parsing.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/event_call.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/event_listener_fields.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/file_edit_refusal.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/flow_translations.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/hacs_backend.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/hacs_registration.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/helper_flows.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/ignored_entries.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/integration_entry_state.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/integration_flow_steps.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/integration_schema.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/integration_ws_commands.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/log_common.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/log_sources.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/log_sources_fault.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/log_sources_logbook.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/radio/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/radio/base.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/radio/matter.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/radio/thread.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/radio/zigbee.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/radio/zwave.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/radio/zwave_parameters.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/recorder_errors.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/reference_validator.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/registry.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/resource_patch.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/scene_discovery.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/search/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/search/base.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/search/component.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/search/entities.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/search/legacy.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/search/modes.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/search/overview.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/search/response.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/search/state.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/server_version.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/smart_search/_base.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/smart_search/_config.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/smart_search/_flow_helpers.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/statistics_calendar.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/statistics_helpers.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/statistics_resets.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/system_restart.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/tool_hints.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/tools_blueprints.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/tools_calendar.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/tools_camera.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/tools_categories.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/tools_config_automations.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/tools_dev.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/tools_entities.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/tools_filesystem.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/tools_groups.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/tools_hacs.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/tools_history.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/tools_integrations.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/tools_logs.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/tools_radio.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/tools_registry.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/tools_resources.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/tools_search.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/tools_security_policy.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/tools_service.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/tools_services.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/tools_system.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/tools_themes.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/tools_todo.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/tools_utility.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/tools_zones.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/update_categories.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/util_helpers.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/validation_middleware.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/tools/yaml_extra_keys.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/transforms/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/transforms/categorized_search.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/transforms/compact_params.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/transforms/component_helpers.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/transforms/component_search.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/transforms/write_tool_note.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/transport_security.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/utils/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/utils/config_hash.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/utils/config_write_lock.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/utils/dashboard_patch.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/utils/data_paths.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/utils/domain_handlers.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/utils/entity_membership.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/utils/fuzzy_search.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/utils/operation_manager.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/utils/registry_update_lock.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/utils/skill_loader.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/visibility/__init__.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/visibility/config_files.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/visibility/identifier_aliases.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/visibility/model.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/visibility/persistence.py +0 -0
- {ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/visibility/resolver.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ha-mcp-dev
|
|
3
|
-
Version: 9.
|
|
3
|
+
Version: 9.3.0.dev3492
|
|
4
4
|
Summary: Configure and automate Home Assistant with Claude, ChatGPT, and other AI assistants.
|
|
5
5
|
Keywords: mcp,home-assistant,ai,automation,smart-home
|
|
6
6
|
Author: Julien
|
|
@@ -10,12 +10,10 @@ License-File: LICENSE
|
|
|
10
10
|
Classifier: Development Status :: 5 - Production/Stable
|
|
11
11
|
Classifier: Intended Audience :: Developers
|
|
12
12
|
Classifier: Programming Language :: Python :: 3
|
|
13
|
-
Classifier: Programming Language :: Python :: 3.13
|
|
14
13
|
Classifier: Programming Language :: Python :: 3.14
|
|
15
14
|
Classifier: Topic :: Home Automation
|
|
16
15
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
17
|
-
Requires-Dist: anyio>=4.10
|
|
18
|
-
Requires-Dist: anyio>=4.9 ; python_full_version < '3.14'
|
|
16
|
+
Requires-Dist: anyio>=4.10
|
|
19
17
|
Requires-Dist: authlib>=1.6.11
|
|
20
18
|
Requires-Dist: certifi>=2026.10.19
|
|
21
19
|
Requires-Dist: cyclopts>=4.0.0
|
|
@@ -53,7 +51,7 @@ Requires-Dist: cryptography>=48.0.0,<51
|
|
|
53
51
|
Requires-Dist: pydantic-monty==0.0.18
|
|
54
52
|
Requires-Dist: tzdata>=2024.1
|
|
55
53
|
Requires-Dist: packaging>=24.0
|
|
56
|
-
Requires-Python: >=3.
|
|
54
|
+
Requires-Python: >=3.14, <3.15
|
|
57
55
|
Project-URL: Homepage, https://github.com/homeassistant-ai/ha-mcp
|
|
58
56
|
Project-URL: Bug Tracker, https://github.com/homeassistant-ai/ha-mcp/issues
|
|
59
57
|
Project-URL: Repository, https://github.com/homeassistant-ai/ha-mcp
|
|
@@ -142,14 +140,14 @@ Prefer to run ha-mcp as a Home Assistant **app (add-on)**? On **Home Assistant O
|
|
|
142
140
|
|
|
143
141
|
[Full app documentation →](homeassistant-addon/DOCS.md)
|
|
144
142
|
|
|
145
|
-
> ⚠️ **Configure exactly one install method per client.** The custom component, the app, Docker/PyPI, and local stdio are independent ways to run the same server — pick one and point your AI client at that single URL. Keeping two entries for the same server in one client (for example a local `uvx ha-mcp@latest` entry with `HOMEASSISTANT_URL` / `HOMEASSISTANT_TOKEN` alongside an app or component URL) is a known cause of connection hangs.
|
|
143
|
+
> ⚠️ **Configure exactly one install method per client.** The custom component, the app, Docker/PyPI, and local stdio are independent ways to run the same server — pick one and point your AI client at that single URL. Keeping two entries for the same server in one client (for example a local `uvx --python 3.14 ha-mcp@latest` entry with `HOMEASSISTANT_URL` / `HOMEASSISTANT_TOKEN` alongside an app or component URL) is a known cause of connection hangs.
|
|
146
144
|
|
|
147
145
|
### Other install methods
|
|
148
146
|
|
|
149
147
|
These run the server outside Home Assistant — useful for **Container** / **Core** installs (which can't run apps) or a separate host. The [Setup Wizard](https://homeassistant-ai.github.io/ha-mcp/setup/) generates the exact client-specific config for each.
|
|
150
148
|
|
|
151
149
|
- **Docker (HTTP server):** run `ghcr.io/homeassistant-ai/ha-mcp` in HTTP mode, pointed at your Home Assistant URL and a long-lived token (an administrator's is recommended; non-admin tokens work with limitations), and connect your client to its secret URL. See the [Setup Wizard](https://homeassistant-ai.github.io/ha-mcp/setup/) for the full command and per-client config.
|
|
152
|
-
- **PyPI / uvx (HTTP server):** run the published `ha-mcp` package with `uvx ha-mcp@latest` (or pip) as a streamable-HTTP server the same way. Details in the [Setup Wizard](https://homeassistant-ai.github.io/ha-mcp/setup/).
|
|
150
|
+
- **PyPI / uvx (HTTP server):** run the published `ha-mcp` package with `uvx --python 3.14 ha-mcp@latest` (or pip) as a streamable-HTTP server the same way. Details in the [Setup Wizard](https://homeassistant-ai.github.io/ha-mcp/setup/).
|
|
153
151
|
- **Local stdio (not recommended):** runs ha-mcp on your own machine over stdio. The one-command installers in the **Demo server** section below use this path; the [Setup Wizard](https://homeassistant-ai.github.io/ha-mcp/setup/) covers connecting it to your own Home Assistant.
|
|
154
152
|
- **OIDC authentication:** gate remote access behind an external identity provider (Authentik, Keycloak, Auth0, etc.) instead of a secret URL — all authenticated users share the server's Home Assistant credentials. See [OIDC Mode](docs/oidc.md).
|
|
155
153
|
|
|
@@ -81,14 +81,14 @@ Prefer to run ha-mcp as a Home Assistant **app (add-on)**? On **Home Assistant O
|
|
|
81
81
|
|
|
82
82
|
[Full app documentation →](homeassistant-addon/DOCS.md)
|
|
83
83
|
|
|
84
|
-
> ⚠️ **Configure exactly one install method per client.** The custom component, the app, Docker/PyPI, and local stdio are independent ways to run the same server — pick one and point your AI client at that single URL. Keeping two entries for the same server in one client (for example a local `uvx ha-mcp@latest` entry with `HOMEASSISTANT_URL` / `HOMEASSISTANT_TOKEN` alongside an app or component URL) is a known cause of connection hangs.
|
|
84
|
+
> ⚠️ **Configure exactly one install method per client.** The custom component, the app, Docker/PyPI, and local stdio are independent ways to run the same server — pick one and point your AI client at that single URL. Keeping two entries for the same server in one client (for example a local `uvx --python 3.14 ha-mcp@latest` entry with `HOMEASSISTANT_URL` / `HOMEASSISTANT_TOKEN` alongside an app or component URL) is a known cause of connection hangs.
|
|
85
85
|
|
|
86
86
|
### Other install methods
|
|
87
87
|
|
|
88
88
|
These run the server outside Home Assistant — useful for **Container** / **Core** installs (which can't run apps) or a separate host. The [Setup Wizard](https://homeassistant-ai.github.io/ha-mcp/setup/) generates the exact client-specific config for each.
|
|
89
89
|
|
|
90
90
|
- **Docker (HTTP server):** run `ghcr.io/homeassistant-ai/ha-mcp` in HTTP mode, pointed at your Home Assistant URL and a long-lived token (an administrator's is recommended; non-admin tokens work with limitations), and connect your client to its secret URL. See the [Setup Wizard](https://homeassistant-ai.github.io/ha-mcp/setup/) for the full command and per-client config.
|
|
91
|
-
- **PyPI / uvx (HTTP server):** run the published `ha-mcp` package with `uvx ha-mcp@latest` (or pip) as a streamable-HTTP server the same way. Details in the [Setup Wizard](https://homeassistant-ai.github.io/ha-mcp/setup/).
|
|
91
|
+
- **PyPI / uvx (HTTP server):** run the published `ha-mcp` package with `uvx --python 3.14 ha-mcp@latest` (or pip) as a streamable-HTTP server the same way. Details in the [Setup Wizard](https://homeassistant-ai.github.io/ha-mcp/setup/).
|
|
92
92
|
- **Local stdio (not recommended):** runs ha-mcp on your own machine over stdio. The one-command installers in the **Demo server** section below use this path; the [Setup Wizard](https://homeassistant-ai.github.io/ha-mcp/setup/) covers connecting it to your own Home Assistant.
|
|
93
93
|
- **OIDC authentication:** gate remote access behind an external identity provider (Authentik, Keycloak, Auth0, etc.) instead of a secret URL — all authenticated users share the server's Home Assistant credentials. See [OIDC Mode](docs/oidc.md).
|
|
94
94
|
|
|
@@ -4,10 +4,10 @@ build-backend = "uv_build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "ha-mcp-dev"
|
|
7
|
-
version = "9.
|
|
7
|
+
version = "9.3.0.dev3492"
|
|
8
8
|
description = "Configure and automate Home Assistant with Claude, ChatGPT, and other AI assistants."
|
|
9
9
|
readme = "README.md"
|
|
10
|
-
requires-python = ">=3.
|
|
10
|
+
requires-python = ">=3.14,<3.15"
|
|
11
11
|
license = "MIT"
|
|
12
12
|
license-files = ["LICENSE"]
|
|
13
13
|
keywords = [
|
|
@@ -21,14 +21,12 @@ classifiers = [
|
|
|
21
21
|
"Development Status :: 5 - Production/Stable",
|
|
22
22
|
"Intended Audience :: Developers",
|
|
23
23
|
"Programming Language :: Python :: 3",
|
|
24
|
-
"Programming Language :: Python :: 3.13",
|
|
25
24
|
"Programming Language :: Python :: 3.14",
|
|
26
25
|
"Topic :: Home Automation",
|
|
27
26
|
"Topic :: Software Development :: Libraries :: Python Modules",
|
|
28
27
|
]
|
|
29
28
|
dependencies = [
|
|
30
|
-
"anyio>=4.10
|
|
31
|
-
"anyio>=4.9; python_version < '3.14'",
|
|
29
|
+
"anyio>=4.10",
|
|
32
30
|
"authlib>=1.6.11",
|
|
33
31
|
"certifi>=2026.10.19",
|
|
34
32
|
"cyclopts>=4.0.0",
|
|
@@ -365,6 +363,11 @@ extend-exclude = [
|
|
|
365
363
|
"custom_components/**/*.json",
|
|
366
364
|
]
|
|
367
365
|
|
|
366
|
+
[tool.ruff.per-file-target-version]
|
|
367
|
+
"src/ha_mcp/__init__.py" = "py313"
|
|
368
|
+
"homeassistant-addon-webhook-proxy/**" = "py313"
|
|
369
|
+
"homeassistant-addon-webhook-proxy-dev/**" = "py313"
|
|
370
|
+
|
|
368
371
|
[tool.ruff.lint]
|
|
369
372
|
select = [
|
|
370
373
|
"E",
|
|
@@ -4,15 +4,13 @@ build-backend = "uv_build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "ha-mcp-dev"
|
|
7
|
-
version = "9.
|
|
7
|
+
version = "9.3.0.dev3492"
|
|
8
8
|
description = "Configure and automate Home Assistant with Claude, ChatGPT, and other AI assistants."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
# Upper bound widened to <3.15 so the package installs on Home Assistant's
|
|
11
11
|
# interpreter when run in-process by the ha_mcp_tools component (HA
|
|
12
|
-
# core-2026.7 ships Python 3.14).
|
|
13
|
-
|
|
14
|
-
# images and the dev environment run 3.14.
|
|
15
|
-
requires-python = ">=3.13,<3.15"
|
|
12
|
+
# core-2026.7 ships Python 3.14).
|
|
13
|
+
requires-python = ">=3.14,<3.15"
|
|
16
14
|
license = "MIT"
|
|
17
15
|
license-files = ["LICENSE"]
|
|
18
16
|
authors = [
|
|
@@ -23,7 +21,6 @@ classifiers = [
|
|
|
23
21
|
"Development Status :: 5 - Production/Stable",
|
|
24
22
|
"Intended Audience :: Developers",
|
|
25
23
|
"Programming Language :: Python :: 3",
|
|
26
|
-
"Programming Language :: Python :: 3.13",
|
|
27
24
|
"Programming Language :: Python :: 3.14",
|
|
28
25
|
"Topic :: Home Automation",
|
|
29
26
|
"Topic :: Software Development :: Libraries :: Python Modules",
|
|
@@ -32,8 +29,7 @@ classifiers = [
|
|
|
32
29
|
dependencies = [
|
|
33
30
|
# fastmcp/mcp/mcp-types are vendored (scripts/vendor_fastmcp.py) so HA
|
|
34
31
|
# Core's own mcp 1.x pin can't conflict. Below: their runtime requirements.
|
|
35
|
-
"anyio>=4.10
|
|
36
|
-
"anyio>=4.9; python_version < '3.14'",
|
|
32
|
+
"anyio>=4.10",
|
|
37
33
|
"authlib>=1.6.11",
|
|
38
34
|
"certifi>=2026.10.19",
|
|
39
35
|
"cyclopts>=4.0.0",
|
|
@@ -438,6 +434,15 @@ extend-exclude = [
|
|
|
438
434
|
"custom_components/**/*.json",
|
|
439
435
|
]
|
|
440
436
|
|
|
437
|
+
|
|
438
|
+
# 3.13 syntax where an older Python must still parse the code: the package's
|
|
439
|
+
# Python-version guard (to print its error instead of a SyntaxError), and the
|
|
440
|
+
# Webhook Proxy, whose component runs on the user's Home Assistant.
|
|
441
|
+
[tool.ruff.per-file-target-version]
|
|
442
|
+
"src/ha_mcp/__init__.py" = "py313"
|
|
443
|
+
"homeassistant-addon-webhook-proxy/**" = "py313"
|
|
444
|
+
"homeassistant-addon-webhook-proxy-dev/**" = "py313"
|
|
445
|
+
|
|
441
446
|
[tool.ruff.lint]
|
|
442
447
|
select = [
|
|
443
448
|
"E", # pycodestyle errors
|
|
@@ -696,7 +701,7 @@ dev = [
|
|
|
696
701
|
|
|
697
702
|
[tool.uv]
|
|
698
703
|
# The dev group's homeassistant requires Python >=3.14.2; the published
|
|
699
|
-
# package keeps >=3.
|
|
704
|
+
# package keeps >=3.14, so only the lock is narrowed.
|
|
700
705
|
environments = ["python_full_version >= '3.14.2'"]
|
|
701
706
|
|
|
702
707
|
[tool.uv.sources]
|
|
@@ -5,6 +5,23 @@ A Model Context Protocol server that provides complete control over Home Assista
|
|
|
5
5
|
through REST API and WebSocket integration.
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
|
+
import sys
|
|
9
|
+
|
|
10
|
+
if sys.version_info < (3, 14):
|
|
11
|
+
# uvx and pip can be forced past requires-python. This runs before any
|
|
12
|
+
# submodule is imported, so an older Python stops here instead of at a
|
|
13
|
+
# SyntaxError in one; pyproject.toml keeps ruff on 3.13 syntax for this
|
|
14
|
+
# file. stderr directly: logging is not set up yet.
|
|
15
|
+
sys.stderr.write(
|
|
16
|
+
f"ERROR: ha-mcp requires Python 3.14+, but you are running Python "
|
|
17
|
+
f"{sys.version_info.major}.{sys.version_info.minor}.\n"
|
|
18
|
+
"If using uvx, add '--python 3.14' to your config args:\n"
|
|
19
|
+
' "args": ["--python", "3.14", "--refresh", "ha-mcp@latest"]\n'
|
|
20
|
+
"Or install Python 3.14: brew install python@3.14 (macOS) / "
|
|
21
|
+
"sudo apt install python3.14 (Linux)\n"
|
|
22
|
+
)
|
|
23
|
+
sys.exit(1)
|
|
24
|
+
|
|
8
25
|
# Must be imported before anything that reaches fastmcp (``.auth`` below does),
|
|
9
26
|
# because fastmcp configures rich logging at import time and dies on a rich
|
|
10
27
|
# older than 13.9.4. Importing this module applies the shim. See #2186.
|
|
@@ -1,20 +1,5 @@
|
|
|
1
1
|
"""Home Assistant MCP Server."""
|
|
2
2
|
|
|
3
|
-
import sys
|
|
4
|
-
|
|
5
|
-
if sys.version_info < (3, 13): # noqa: UP036 — uvx can bypass requires-python and run on 3.12
|
|
6
|
-
# Write directly to stderr (not print) so this import-time version gate
|
|
7
|
-
# fires before any 3.13-only syntax in the rest of the module is parsed.
|
|
8
|
-
sys.stderr.write(
|
|
9
|
-
f"ERROR: ha-mcp requires Python 3.13+, but you are running Python "
|
|
10
|
-
f"{sys.version_info.major}.{sys.version_info.minor}.\n"
|
|
11
|
-
"If using uvx, add '--python 3.13' to your config args:\n"
|
|
12
|
-
' "args": ["--python", "3.13", "--refresh", "ha-mcp@latest"]\n'
|
|
13
|
-
"Or install Python 3.13: brew install python@3.13 (macOS) / "
|
|
14
|
-
"sudo apt install python3.13 (Linux)\n"
|
|
15
|
-
)
|
|
16
|
-
sys.exit(1)
|
|
17
|
-
|
|
18
3
|
import truststore
|
|
19
4
|
|
|
20
5
|
truststore.inject_into_ssl()
|
|
@@ -65,7 +50,7 @@ class OAuthProxyClient:
|
|
|
65
50
|
self._oauth_clients: dict[str, HomeAssistantClient] = {}
|
|
66
51
|
self._lock = threading.Lock()
|
|
67
52
|
|
|
68
|
-
def current_client(self) ->
|
|
53
|
+
def current_client(self) -> HomeAssistantClient:
|
|
69
54
|
"""The requesting user's client; per-user caches key on it, not the proxy."""
|
|
70
55
|
from ha_mcp._vendor.fastmcp.server.dependencies import get_access_token
|
|
71
56
|
from ha_mcp.client.rest_client import (
|
|
@@ -215,7 +200,7 @@ def _check_stdin_available() -> bool:
|
|
|
215
200
|
try:
|
|
216
201
|
fd = sys.stdin.fileno()
|
|
217
202
|
mode = os.fstat(fd).st_mode
|
|
218
|
-
except
|
|
203
|
+
except ValueError, OSError:
|
|
219
204
|
# fileno() or fstat() can raise if stdin is not a real file
|
|
220
205
|
return False
|
|
221
206
|
|
|
@@ -271,7 +256,7 @@ For setup instructions, see:
|
|
|
271
256
|
sys.exit(1)
|
|
272
257
|
|
|
273
258
|
|
|
274
|
-
def _validate_standard_credentials(settings:
|
|
259
|
+
def _validate_standard_credentials(settings: Settings) -> None:
|
|
275
260
|
"""Exit with error if HA credentials are OAuth sentinels in standard (non-OAuth) mode."""
|
|
276
261
|
from ha_mcp.config import OAUTH_MODE_TOKEN, OAUTH_MODE_URL
|
|
277
262
|
|
|
@@ -327,7 +312,7 @@ def _http_run_kwargs(host: str, port: int, path: str) -> dict[str, Any]:
|
|
|
327
312
|
}
|
|
328
313
|
|
|
329
314
|
|
|
330
|
-
def _create_server() ->
|
|
315
|
+
def _create_server() -> HomeAssistantSmartMCPServer:
|
|
331
316
|
"""Create server instance (deferred to avoid import during smoke test)."""
|
|
332
317
|
from pydantic import ValidationError
|
|
333
318
|
|
|
@@ -350,10 +335,10 @@ def _create_server() -> "HomeAssistantSmartMCPServer":
|
|
|
350
335
|
|
|
351
336
|
|
|
352
337
|
# Lazy server creation - only create when needed
|
|
353
|
-
_server:
|
|
338
|
+
_server: HomeAssistantSmartMCPServer | None = None
|
|
354
339
|
|
|
355
340
|
|
|
356
|
-
def _get_mcp() ->
|
|
341
|
+
def _get_mcp() -> FastMCP:
|
|
357
342
|
"""Get the MCP instance, creating server if needed."""
|
|
358
343
|
global _server
|
|
359
344
|
if _server is None:
|
|
@@ -361,7 +346,7 @@ def _get_mcp() -> "FastMCP":
|
|
|
361
346
|
return _server.mcp
|
|
362
347
|
|
|
363
348
|
|
|
364
|
-
def _get_server() ->
|
|
349
|
+
def _get_server() -> HomeAssistantSmartMCPServer:
|
|
365
350
|
"""Get the server instance, creating if needed."""
|
|
366
351
|
global _server
|
|
367
352
|
if _server is None:
|
|
@@ -559,7 +544,7 @@ async def _cleanup_resources() -> None:
|
|
|
559
544
|
logger.info("Server resources cleaned up")
|
|
560
545
|
|
|
561
546
|
|
|
562
|
-
def _log_cleanup_result(task:
|
|
547
|
+
def _log_cleanup_result(task: asyncio.Future[None]) -> None:
|
|
563
548
|
"""Consume the cleanup task's outcome so a failure is never silent.
|
|
564
549
|
|
|
565
550
|
``asyncio.wait`` does not retrieve results, and the timeout path
|
|
@@ -1138,7 +1123,7 @@ def _oidc_allowed_client_redirect_uris() -> list[str] | None:
|
|
|
1138
1123
|
|
|
1139
1124
|
|
|
1140
1125
|
def register_browser_landing(
|
|
1141
|
-
mcp_instance:
|
|
1126
|
+
mcp_instance: FastMCP | _DeferredMCP,
|
|
1142
1127
|
path: str,
|
|
1143
1128
|
) -> None:
|
|
1144
1129
|
"""Register the friendly browser landing page and tidy the uvicorn access log.
|
|
@@ -1277,8 +1262,8 @@ def _resolve_settings_secret_path() -> str | None:
|
|
|
1277
1262
|
|
|
1278
1263
|
|
|
1279
1264
|
def _register_settings_ui_secret_path(
|
|
1280
|
-
mcp:
|
|
1281
|
-
server:
|
|
1265
|
+
mcp: FastMCP,
|
|
1266
|
+
server: HomeAssistantSmartMCPServer,
|
|
1282
1267
|
host: str,
|
|
1283
1268
|
port: int,
|
|
1284
1269
|
mcp_path: str,
|
|
@@ -67,7 +67,7 @@ def ensure_rich_handler_compat() -> bool:
|
|
|
67
67
|
|
|
68
68
|
try:
|
|
69
69
|
parameters = inspect.signature(original_init).parameters
|
|
70
|
-
except
|
|
70
|
+
except TypeError, ValueError: # pragma: no cover - exotic rich build
|
|
71
71
|
logger.debug("RichHandler.__init__ is not introspectable; skipping shim")
|
|
72
72
|
return False
|
|
73
73
|
|
|
@@ -76,7 +76,7 @@ async def _locate_calendar_event(
|
|
|
76
76
|
days = int(
|
|
77
77
|
getattr(get_global_settings(), "auto_backup_calendar_lookahead_days", 7)
|
|
78
78
|
)
|
|
79
|
-
except
|
|
79
|
+
except AttributeError, ImportError, ValueError, TypeError:
|
|
80
80
|
days = 7
|
|
81
81
|
days = max(1, min(365, days))
|
|
82
82
|
now = datetime.now(UTC)
|
|
@@ -1979,7 +1979,7 @@ def get_backup_manager(client: Any, settings: Any) -> BackupManager:
|
|
|
1979
1979
|
register_default_handlers(mgr, client)
|
|
1980
1980
|
try:
|
|
1981
1981
|
client._auto_backup_manager = mgr
|
|
1982
|
-
except
|
|
1982
|
+
except AttributeError, TypeError:
|
|
1983
1983
|
# Read-only client (e.g. a slotted mock) — manager still works,
|
|
1984
1984
|
# just isn't cached.
|
|
1985
1985
|
pass
|
|
@@ -268,7 +268,7 @@ def _pick_render_error(first: str, queue: asyncio.Queue[dict[str, Any]]) -> str:
|
|
|
268
268
|
while True:
|
|
269
269
|
try:
|
|
270
270
|
event = queue.get_nowait().get("event") or {}
|
|
271
|
-
except
|
|
271
|
+
except asyncio.QueueEmpty, asyncio.QueueShutDown:
|
|
272
272
|
break
|
|
273
273
|
error = event.get("error")
|
|
274
274
|
if event.get("level") == "ERROR" and isinstance(error, str):
|
|
@@ -406,7 +406,7 @@ class HomeAssistantClient:
|
|
|
406
406
|
|
|
407
407
|
logger.info(f"Initialized Home Assistant client for {self.base_url}")
|
|
408
408
|
|
|
409
|
-
async def __aenter__(self) ->
|
|
409
|
+
async def __aenter__(self) -> HomeAssistantClient:
|
|
410
410
|
"""Async context manager entry."""
|
|
411
411
|
return self
|
|
412
412
|
|
|
@@ -1242,7 +1242,7 @@ class HomeAssistantWebSocketClient:
|
|
|
1242
1242
|
MAX_POOL_SIZE = 50
|
|
1243
1243
|
|
|
1244
1244
|
|
|
1245
|
-
def _log_stale_disconnect(future:
|
|
1245
|
+
def _log_stale_disconnect(future: concurrent.futures.Future[None]) -> None:
|
|
1246
1246
|
"""Report how a disconnect scheduled on a stale event loop ended.
|
|
1247
1247
|
|
|
1248
1248
|
Nothing awaits that future, so without this the outcome would be invisible
|
|
@@ -1274,7 +1274,7 @@ class WebSocketManager:
|
|
|
1274
1274
|
_lock_loop: asyncio.AbstractEventLoop | None = None
|
|
1275
1275
|
_client_factory: Callable[..., HomeAssistantWebSocketClient] | None = None
|
|
1276
1276
|
|
|
1277
|
-
def __new__(cls) ->
|
|
1277
|
+
def __new__(cls) -> WebSocketManager:
|
|
1278
1278
|
if cls._instance is None:
|
|
1279
1279
|
cls._instance = super().__new__(cls)
|
|
1280
1280
|
cls._instance._clients = {}
|
|
@@ -1492,7 +1492,7 @@ class WebSocketManager:
|
|
|
1492
1492
|
# doing network I/O and leave a fresh connection retained
|
|
1493
1493
|
# in the pool.
|
|
1494
1494
|
raise
|
|
1495
|
-
except
|
|
1495
|
+
except OSError, RuntimeError:
|
|
1496
1496
|
logger.warning(
|
|
1497
1497
|
"Error disconnecting stale WebSocket client",
|
|
1498
1498
|
exc_info=True,
|
|
@@ -1547,7 +1547,7 @@ class WebSocketManager:
|
|
|
1547
1547
|
# cancelled caller (mirror of the stale-replacement clause
|
|
1548
1548
|
# in get_client).
|
|
1549
1549
|
raise
|
|
1550
|
-
except
|
|
1550
|
+
except OSError, RuntimeError:
|
|
1551
1551
|
logger.warning(
|
|
1552
1552
|
"Error disconnecting evicted WebSocket client",
|
|
1553
1553
|
exc_info=True,
|
|
@@ -1577,7 +1577,7 @@ class WebSocketManager:
|
|
|
1577
1577
|
for client in clients:
|
|
1578
1578
|
try:
|
|
1579
1579
|
await client.disconnect()
|
|
1580
|
-
except
|
|
1580
|
+
except OSError, RuntimeError, asyncio.CancelledError:
|
|
1581
1581
|
logger.warning(
|
|
1582
1582
|
"Error disconnecting WebSocket client", exc_info=True
|
|
1583
1583
|
)
|
|
@@ -75,7 +75,7 @@ __all__ = [
|
|
|
75
75
|
]
|
|
76
76
|
|
|
77
77
|
|
|
78
|
-
def parse_extra_yaml_write_keys(settings:
|
|
78
|
+
def parse_extra_yaml_write_keys(settings: Settings) -> list[str]:
|
|
79
79
|
"""Parse ``extra_yaml_write_keys`` into a clean key list (#1887).
|
|
80
80
|
|
|
81
81
|
Whitespace and empty entries are dropped and the result is deduplicated
|
|
@@ -212,7 +212,7 @@ def _reset_embedded_connection() -> None:
|
|
|
212
212
|
_EMBEDDED_CONNECTION.clear()
|
|
213
213
|
|
|
214
214
|
|
|
215
|
-
def _apply_embedded_connection(settings:
|
|
215
|
+
def _apply_embedded_connection(settings: Settings) -> None:
|
|
216
216
|
"""Apply the in-process embedded HA connection (url/token/verify_ssl) if registered.
|
|
217
217
|
|
|
218
218
|
No-op outside embedded mode. Plain ``setattr`` (``validate_assignment`` is off
|
|
@@ -88,7 +88,7 @@ def _read_backup_override_file() -> dict[str, object]:
|
|
|
88
88
|
from .utils.data_paths import get_data_dir
|
|
89
89
|
|
|
90
90
|
path: Path = get_data_dir() / _BACKUP_OVERRIDE_FILENAME
|
|
91
|
-
except
|
|
91
|
+
except RuntimeError, OSError:
|
|
92
92
|
# Couldn't resolve the data dir at all — user has no override
|
|
93
93
|
# file by definition. Silent.
|
|
94
94
|
return {}
|
|
@@ -190,7 +190,7 @@ def _coerce_backup_override_value(
|
|
|
190
190
|
|
|
191
191
|
|
|
192
192
|
def _apply_one_backup_override(
|
|
193
|
-
settings:
|
|
193
|
+
settings: Settings,
|
|
194
194
|
field_name: str,
|
|
195
195
|
env_name: str,
|
|
196
196
|
ftype: RegistryFieldType,
|
|
@@ -217,7 +217,7 @@ def _apply_one_backup_override(
|
|
|
217
217
|
)
|
|
218
218
|
|
|
219
219
|
|
|
220
|
-
def _apply_backup_overrides(settings:
|
|
220
|
+
def _apply_backup_overrides(settings: Settings) -> None:
|
|
221
221
|
"""Patch ``settings`` with values from the override file, in place.
|
|
222
222
|
|
|
223
223
|
Honors the "env var wins" contract: a field whose env var is set in
|
|
@@ -136,7 +136,7 @@ def _read_feature_flag_override_file() -> dict[str, object]:
|
|
|
136
136
|
from .utils.data_paths import get_data_dir
|
|
137
137
|
|
|
138
138
|
path: Path = get_data_dir() / _FEATURE_FLAG_OVERRIDE_FILENAME
|
|
139
|
-
except
|
|
139
|
+
except RuntimeError, OSError:
|
|
140
140
|
# Couldn't resolve the data dir at all — user has no override
|
|
141
141
|
# file by definition. Silent.
|
|
142
142
|
return {}
|
|
@@ -215,7 +215,7 @@ def _coerce_feature_flag_value(
|
|
|
215
215
|
|
|
216
216
|
|
|
217
217
|
def _apply_one_feature_flag_override(
|
|
218
|
-
settings:
|
|
218
|
+
settings: Settings,
|
|
219
219
|
field_name: str,
|
|
220
220
|
env_name: str,
|
|
221
221
|
ftype: RegistryFieldType,
|
|
@@ -256,7 +256,7 @@ def _apply_one_feature_flag_override(
|
|
|
256
256
|
)
|
|
257
257
|
|
|
258
258
|
|
|
259
|
-
def _apply_beta_master_gate(settings:
|
|
259
|
+
def _apply_beta_master_gate(settings: Settings) -> None:
|
|
260
260
|
"""Force BETA_FEATURE_FIELDS to False when ``enable_beta_features`` is off.
|
|
261
261
|
|
|
262
262
|
This is the "master toggle" semantics: even a power user who sets
|
|
@@ -300,7 +300,7 @@ def _apply_beta_master_gate(settings: "Settings") -> None:
|
|
|
300
300
|
)
|
|
301
301
|
|
|
302
302
|
|
|
303
|
-
def _apply_feature_flag_overrides(settings:
|
|
303
|
+
def _apply_feature_flag_overrides(settings: Settings) -> None:
|
|
304
304
|
"""Patch ``settings`` with override-file values + apply the master beta gate.
|
|
305
305
|
|
|
306
306
|
Two behaviors interleave:
|
|
@@ -429,7 +429,7 @@ def _advanced_override_passes_constraints(fname: str, coerced: Any) -> bool:
|
|
|
429
429
|
|
|
430
430
|
|
|
431
431
|
def _apply_one_advanced_override(
|
|
432
|
-
settings:
|
|
432
|
+
settings: Settings,
|
|
433
433
|
fname: str,
|
|
434
434
|
env_name: str,
|
|
435
435
|
ftype: RegistryFieldType,
|
|
@@ -461,7 +461,7 @@ def _apply_one_advanced_override(
|
|
|
461
461
|
return
|
|
462
462
|
try:
|
|
463
463
|
setattr(settings, fname, coerced)
|
|
464
|
-
except
|
|
464
|
+
except ValueError, TypeError:
|
|
465
465
|
# Narrowed from bare ``Exception`` to match the parallel
|
|
466
466
|
# _apply_feature_flag_overrides handler. Pydantic validation
|
|
467
467
|
# surfaces failures as ValueError; an
|
|
@@ -474,7 +474,7 @@ def _apply_one_advanced_override(
|
|
|
474
474
|
)
|
|
475
475
|
|
|
476
476
|
|
|
477
|
-
def _apply_advanced_overrides(settings:
|
|
477
|
+
def _apply_advanced_overrides(settings: Settings) -> None:
|
|
478
478
|
"""Patch ``settings`` with advanced-section override values from
|
|
479
479
|
``feature_flags.json``.
|
|
480
480
|
|
{ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/dashboard_screenshot/capture.py
RENAMED
|
@@ -757,7 +757,7 @@ async def _request_or_collect_failure(
|
|
|
757
757
|
raise
|
|
758
758
|
try:
|
|
759
759
|
failure = json.loads(str(exc))
|
|
760
|
-
except
|
|
760
|
+
except json.JSONDecodeError, TypeError:
|
|
761
761
|
failure = None
|
|
762
762
|
if not isinstance(failure, dict):
|
|
763
763
|
failure = create_error_response(
|
|
@@ -825,7 +825,7 @@ def _reraise_with_guard_warnings(error: ToolError, warnings: list[str]) -> NoRet
|
|
|
825
825
|
raise error
|
|
826
826
|
try:
|
|
827
827
|
payload = json.loads(str(error))
|
|
828
|
-
except
|
|
828
|
+
except json.JSONDecodeError, TypeError:
|
|
829
829
|
payload = None
|
|
830
830
|
if not isinstance(payload, dict):
|
|
831
831
|
raise error
|
{ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/dashboard_screenshot/paths.py
RENAMED
|
@@ -714,7 +714,7 @@ async def _validate_legacy_dashboard_root(
|
|
|
714
714
|
except ToolError as exc:
|
|
715
715
|
try:
|
|
716
716
|
error_payload = json.loads(str(exc))
|
|
717
|
-
except
|
|
717
|
+
except json.JSONDecodeError, TypeError:
|
|
718
718
|
# A non-JSON ToolError (e.g. a WS-layer error whose str() is not
|
|
719
719
|
# the raise_tool_error JSON form) must surface as its original
|
|
720
720
|
# ToolError, not as the leaked parse exception.
|
|
@@ -43,7 +43,7 @@ class StatelessSessionLogFilter(logging.Filter):
|
|
|
43
43
|
return True
|
|
44
44
|
try:
|
|
45
45
|
message = record.getMessage()
|
|
46
|
-
except
|
|
46
|
+
except ValueError, TypeError:
|
|
47
47
|
# A malformed %-format record on this logger is not our target, and
|
|
48
48
|
# a filter must not raise: filters run in Logger.handle() with no
|
|
49
49
|
# exception handling, so a raise would crash the logging call.
|
|
@@ -160,7 +160,7 @@ def _load_record(data_dir: Path) -> tuple[str, dict[str, Any] | None]:
|
|
|
160
160
|
raw = json.loads(path.read_text(encoding="utf-8"))
|
|
161
161
|
except FileNotFoundError:
|
|
162
162
|
return PIN_ABSENT, None
|
|
163
|
-
except
|
|
163
|
+
except OSError, ValueError:
|
|
164
164
|
# ValueError rather than JSONDecodeError alone: reading the bytes can
|
|
165
165
|
# fail before the parser ever sees them. A file holding invalid UTF-8
|
|
166
166
|
# raises UnicodeDecodeError here, and that is the same answer to the
|
|
@@ -193,7 +193,7 @@ def _decode_record(record: dict[str, Any]) -> tuple[bytes, bytes, int] | None:
|
|
|
193
193
|
expected = base64.b64decode(record["hash"], validate=True)
|
|
194
194
|
iterations = int(record["iterations"])
|
|
195
195
|
algorithm = record["algorithm"]
|
|
196
|
-
except
|
|
196
|
+
except KeyError, TypeError, ValueError, OverflowError, binascii.Error:
|
|
197
197
|
# OverflowError is not a ValueError: a JSON work factor written in
|
|
198
198
|
# exponent form, ``1e309``, parses to an infinite float, and int()
|
|
199
199
|
# refuses to convert it. Without this the record escapes as an
|
|
@@ -173,7 +173,7 @@ async def _get_pending(queue: ApprovalQueue) -> JSONResponse:
|
|
|
173
173
|
async def _post_approve(queue: ApprovalQueue, request: Request) -> JSONResponse:
|
|
174
174
|
try:
|
|
175
175
|
body = await request.json()
|
|
176
|
-
except
|
|
176
|
+
except ValueError, TypeError:
|
|
177
177
|
return JSONResponse({"error": "invalid JSON body"}, status_code=400)
|
|
178
178
|
if not isinstance(body, dict):
|
|
179
179
|
return JSONResponse({"error": "body must be a JSON object"}, status_code=400)
|
|
@@ -201,7 +201,7 @@ async def _post_approve(queue: ApprovalQueue, request: Request) -> JSONResponse:
|
|
|
201
201
|
async def _post_deny(queue: ApprovalQueue, request: Request) -> JSONResponse:
|
|
202
202
|
try:
|
|
203
203
|
body = await request.json()
|
|
204
|
-
except
|
|
204
|
+
except ValueError, TypeError:
|
|
205
205
|
return JSONResponse({"error": "invalid JSON body"}, status_code=400)
|
|
206
206
|
if not isinstance(body, dict):
|
|
207
207
|
return JSONResponse({"error": "body must be a JSON object"}, status_code=400)
|
|
@@ -227,7 +227,7 @@ async def _get_decision_pin(data_dir: Path) -> JSONResponse:
|
|
|
227
227
|
async def _post_decision_pin(data_dir: Path, request: Request) -> JSONResponse:
|
|
228
228
|
try:
|
|
229
229
|
body = await request.json()
|
|
230
|
-
except
|
|
230
|
+
except ValueError, TypeError:
|
|
231
231
|
return JSONResponse({"error": "invalid JSON body"}, status_code=400)
|
|
232
232
|
if not isinstance(body, dict):
|
|
233
233
|
return JSONResponse({"error": "body must be a JSON object"}, status_code=400)
|
|
@@ -141,7 +141,7 @@ class Policy(BaseModel):
|
|
|
141
141
|
schema_version: int = Field(default=POLICY_SCHEMA_VERSION, ge=1)
|
|
142
142
|
|
|
143
143
|
@model_validator(mode="after")
|
|
144
|
-
def _wait_must_be_less_than_ttl(self) ->
|
|
144
|
+
def _wait_must_be_less_than_ttl(self) -> Policy:
|
|
145
145
|
# If the middleware's wait window can outlast the entry's TTL
|
|
146
146
|
# the queue's sweeper evicts the entry mid-wait and the
|
|
147
147
|
# reissue-pending path fires on every call — burning one
|
|
@@ -118,7 +118,7 @@ def _migrate_policy_any_semantics_locked(data_dir: Path) -> bool:
|
|
|
118
118
|
raw = json.loads(path.read_text(encoding="utf-8"))
|
|
119
119
|
except FileNotFoundError:
|
|
120
120
|
return False
|
|
121
|
-
except
|
|
121
|
+
except OSError, json.JSONDecodeError:
|
|
122
122
|
logger.warning("policy migration: cannot read %s; leaving as-is", path)
|
|
123
123
|
return False
|
|
124
124
|
if not isinstance(raw, dict) or raw.get("schema_version") is not None:
|
{ha_mcp_dev-9.2.0.dev3491 → ha_mcp_dev-9.3.0.dev3492}/src/ha_mcp/settings_ui/_handlers_advanced.py
RENAMED
|
@@ -558,7 +558,7 @@ async def _save_advanced_settings(
|
|
|
558
558
|
|
|
559
559
|
try:
|
|
560
560
|
body = await request.json()
|
|
561
|
-
except
|
|
561
|
+
except ValueError, TypeError:
|
|
562
562
|
return JSONResponse(
|
|
563
563
|
create_error_response(
|
|
564
564
|
ErrorCode.VALIDATION_INVALID_JSON, "Invalid JSON body"
|