ha-mcp-dev 8.4.3.dev2624__tar.gz → 8.4.3.dev2627__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ha_mcp_dev-8.4.3.dev2624/src/ha_mcp_dev.egg-info → ha_mcp_dev-8.4.3.dev2627}/PKG-INFO +1 -1
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/pyproject.toml +17 -1
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/__main__.py +1 -1
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/config.py +16 -0
- ha_mcp_dev-8.4.3.dev2627/src/ha_mcp/http_transport.py +160 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/server.py +1 -1
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/__init__.py +0 -1
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/locales/en.json +4 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/settings.js +3 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627/src/ha_mcp_dev.egg-info}/PKG-INFO +1 -1
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp_dev.egg-info/SOURCES.txt +1 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/LICENSE +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/MANIFEST.in +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/README.md +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/setup.cfg +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_pypi_marker +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_rich_compat.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/requirements.txt +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/client.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/server.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/version.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_version.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/auth/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/auth/consent_form.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/auth/oidc_compat.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/auth/provider.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/backup_manager.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/browser_landing.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/client/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/client/rest_client.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/client/supervisor_client.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/client/websocket_client.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/client/websocket_listener.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/errors.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/ha_request_queue.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/hacs_auto_refresh.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/llm_exposure.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/log_filters.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/policy/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/policy/approval_queue.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/policy/editing.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/policy/evaluator.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/policy/handlers.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/policy/middleware.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/policy/model.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/policy/persistence.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/policy/value_sources.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/py.typed +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/read_only.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/redaction.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/renamed_tools.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/.github/pull_request_template.md +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/evals/area-target-over-entity-list/case.yaml +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/evals/arrive-home-automation/case.yaml +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/evals/assist-shortcut-card/case.yaml +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/evals/avg-temperature/case.yaml +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/evals/backup-deletion-confirmation/case.yaml +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/evals/blueprint-authoring/case.yaml +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/evals/button-event-entity/case.yaml +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/evals/device-id-trigger-migration/case.yaml +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/evals/helper-flow-fields-not-platform-yaml/case.yaml +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/evals/media-player-song/case.yaml +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/evals/motion-light-automation-mode/case.yaml +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/evals/rename-entity-impact-analysis/case.yaml +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/evals/template-attributes-yaml-exception/case.yaml +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/evals/timer-finished-automation/case.yaml +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/evals/vacuum-last-clean/case.yaml +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/scripts/check_eval_cases.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/_i18n.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/_persistence.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/_theme.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/locales/README.md +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/locales/de.json +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/locales/es.json +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/locales/it.json +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/settings.css +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/settings.html +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/smoke_test.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/strict_bps.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tool_dispatch.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/auto_backup.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/backup.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/best_practice_checker.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/best_practice_result.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/best_practice_variables.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/blueprint_sources.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/blueprint_write.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/bulk_selector.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/component_api.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/component_config_entries.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/component_config_reads.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/component_devices.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/component_registries.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/config_entry_flow.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/config_entry_identity.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/device_control.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/error_log_parsing.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/hacs_registration.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/helpers.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/log_common.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/log_sources.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/log_sources_fault.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/radio/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/radio/base.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/radio/matter.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/radio/thread.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/radio/zigbee.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/radio/zwave.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/reference_validator.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/registry.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/smart_search/_base.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/smart_search/_config.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_addons.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_areas.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_blueprints.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_bug_report.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_calendar.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_camera.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_categories.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_code.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_config_automations.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_dev.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_energy.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_entities.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_filesystem.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_groups.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_hacs.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_history.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_integrations.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_labels.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_logs.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_radio.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_registry.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_resources.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_search.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_security_policy.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_service.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_services.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_system.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_themes.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_todo.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_traces.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_updates.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_utility.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_zones.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/util_helpers.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/validation_middleware.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/transforms/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/transforms/categorized_search.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/transport_security.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/update_check.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/utils/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/utils/config_hash.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/utils/config_write_lock.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/utils/dashboard_patch.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/utils/data_paths.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/utils/domain_handlers.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/utils/entity_membership.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/utils/fuzzy_search.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/utils/operation_manager.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/utils/python_sandbox.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/utils/skill_loader.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/utils/usage_logger.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/visibility/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/visibility/enforcement.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/visibility/model.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/visibility/persistence.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/visibility/resolver.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/tests/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/tests/test_constants.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/tests/test_env_manager.py +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "ha-mcp-dev"
|
|
7
|
-
version = "8.4.3.
|
|
7
|
+
version = "8.4.3.dev2627"
|
|
8
8
|
description = "Home Assistant MCP Server - Complete control of Home Assistant through MCP"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
# Upper bound widened to <3.15 so the package installs on Home Assistant's
|
|
@@ -94,6 +94,14 @@ mypy_path = "src"
|
|
|
94
94
|
# /tmp keeps the cache on Linux tmpfs — avoids the slow Windows FS in WSL2.
|
|
95
95
|
# Windows-native contributors can remove this line or override with MYPY_CACHE_DIR.
|
|
96
96
|
cache_dir = "/tmp/.mypy_cache"
|
|
97
|
+
# Vendored skills submodule: upstream's code, not ours to type-check. This is
|
|
98
|
+
# the exclusion that was actually failing a local run, because `mypy src/`
|
|
99
|
+
# recurses into the submodule when it is initialized while CI's lint job checks
|
|
100
|
+
# out without `submodules: true` and never sees it.
|
|
101
|
+
# A regex, NOT a [[tool.mypy.overrides]] module entry like the ha_mcp._vendor.*
|
|
102
|
+
# one below: `skills-vendor` contains a hyphen, so it has no importable module
|
|
103
|
+
# path for a module pattern to match. Do not "simplify" it into that block.
|
|
104
|
+
exclude = ['^src/ha_mcp/resources/skills-vendor/']
|
|
97
105
|
warn_return_any = true
|
|
98
106
|
warn_unused_configs = true
|
|
99
107
|
disallow_untyped_defs = true
|
|
@@ -150,6 +158,14 @@ extend-exclude = [
|
|
|
150
158
|
# Vendored websockets — upstream's code style, not ours. Kept in sync
|
|
151
159
|
# with PATHS_IGNORE in scripts/codeql_quality_gate.py.
|
|
152
160
|
"src/ha_mcp/_vendor/websockets",
|
|
161
|
+
# Vendored skills submodule (src/ha_mcp/resources/skills-vendor) — upstream's
|
|
162
|
+
# code, shipped as package data. This covers the directory-scoped commands,
|
|
163
|
+
# `ruff check src/ ...` in CI and the ones in CONTRIBUTING.md. It does NOT
|
|
164
|
+
# affect lefthook, which passes {staged_files} as explicit paths that ruff
|
|
165
|
+
# lints regardless of extend-exclude (force-exclude is not set), and a
|
|
166
|
+
# submodule's contents are never staged in the superproject anyway. Kept in
|
|
167
|
+
# sync with PATHS_IGNORE in scripts/codeql_quality_gate.py.
|
|
168
|
+
"src/ha_mcp/resources/skills-vendor",
|
|
153
169
|
# HA integration manifests must be strict JSON (no trailing commas);
|
|
154
170
|
# ruff 0.15+ formats .json files as JSONC and inserts trailing commas
|
|
155
171
|
# which makes Python's json.load() reject the file at HA startup.
|
|
@@ -616,7 +616,7 @@ async def _run_with_shutdown(server_coro: Coroutine[Any, Any, Any]) -> None:
|
|
|
616
616
|
shutdown_task = asyncio.create_task(_shutdown_event.wait())
|
|
617
617
|
|
|
618
618
|
try:
|
|
619
|
-
done,
|
|
619
|
+
done, _ = await asyncio.wait(
|
|
620
620
|
[server_task, shutdown_task],
|
|
621
621
|
return_when=asyncio.FIRST_COMPLETED,
|
|
622
622
|
)
|
|
@@ -124,6 +124,12 @@ class Settings(BaseSettings):
|
|
|
124
124
|
debug: bool = Field(False, alias="DEBUG")
|
|
125
125
|
log_level: str = Field("INFO", alias="LOG_LEVEL")
|
|
126
126
|
|
|
127
|
+
# Opt-in HTTP experiments, applied at app construction (restart required).
|
|
128
|
+
http_transport_diagnostics: bool = Field(
|
|
129
|
+
False, alias="HAMCP_HTTP_TRANSPORT_DIAGNOSTICS"
|
|
130
|
+
)
|
|
131
|
+
http_json_response: bool = Field(False, alias="HAMCP_HTTP_JSON_RESPONSE")
|
|
132
|
+
|
|
127
133
|
# MCP Server configuration
|
|
128
134
|
mcp_server_name: str = Field("ha-mcp", alias="MCP_SERVER_NAME")
|
|
129
135
|
mcp_server_version: str = Field(
|
|
@@ -940,6 +946,16 @@ ADVANCED_SETTINGS_FIELDS: tuple[AdvancedField, ...] = (
|
|
|
940
946
|
AdvancedField("environment", "ENVIRONMENT", str, "diagnostics", True),
|
|
941
947
|
AdvancedField("log_level", "LOG_LEVEL", str, "diagnostics", True),
|
|
942
948
|
AdvancedField("debug", "DEBUG", bool, "diagnostics", True),
|
|
949
|
+
AdvancedField(
|
|
950
|
+
"http_transport_diagnostics",
|
|
951
|
+
"HAMCP_HTTP_TRANSPORT_DIAGNOSTICS",
|
|
952
|
+
bool,
|
|
953
|
+
"diagnostics",
|
|
954
|
+
True,
|
|
955
|
+
),
|
|
956
|
+
AdvancedField(
|
|
957
|
+
"http_json_response", "HAMCP_HTTP_JSON_RESPONSE", bool, "diagnostics", True
|
|
958
|
+
),
|
|
943
959
|
# Settings UI sidecar (stdio-only). 0 (default) = first spawn picks a
|
|
944
960
|
# free port and later spawns reuse it via ui.state (#2131); a value
|
|
945
961
|
# pins a preferred fixed port instead (best-effort, #1587).
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
"""Default-off HTTP diagnostics and JSON responses for HA-MCP launchers."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import logging
|
|
6
|
+
from dataclasses import dataclass
|
|
7
|
+
from time import monotonic
|
|
8
|
+
from typing import Any
|
|
9
|
+
from uuid import uuid4
|
|
10
|
+
|
|
11
|
+
import fastmcp
|
|
12
|
+
from fastmcp import FastMCP
|
|
13
|
+
from fastmcp.server.http import StarletteWithLifespan
|
|
14
|
+
from starlette.middleware import Middleware
|
|
15
|
+
from starlette.types import ASGIApp, Message, Receive, Scope, Send
|
|
16
|
+
|
|
17
|
+
from .config import get_global_settings
|
|
18
|
+
|
|
19
|
+
logger = logging.getLogger(__name__)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class HttpTransportFastMCP(FastMCP):
|
|
23
|
+
"""Apply instance HTTP experiments at the shared app-construction boundary.
|
|
24
|
+
|
|
25
|
+
Both CLI HTTP launchers and existing embedded components call ``http_app``.
|
|
26
|
+
Keep FastMCP's arguments untouched when the options are off, including any
|
|
27
|
+
existing FASTMCP_JSON_RESPONSE setting. Stdio does not use this method.
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
def http_app(self, *args: Any, **kwargs: Any) -> StarletteWithLifespan:
|
|
31
|
+
"""Build the normal app, adding only explicitly enabled experiments."""
|
|
32
|
+
settings = get_global_settings()
|
|
33
|
+
if settings.http_json_response:
|
|
34
|
+
# FastMCP accepts json_response as its third positional argument.
|
|
35
|
+
if len(args) > 2:
|
|
36
|
+
args = (*args[:2], True, *args[3:])
|
|
37
|
+
else:
|
|
38
|
+
kwargs["json_response"] = True
|
|
39
|
+
if settings.http_transport_diagnostics:
|
|
40
|
+
path = args[0] if args else kwargs.get("path")
|
|
41
|
+
existing = args[1] if len(args) > 1 else kwargs.get("middleware")
|
|
42
|
+
middleware = [
|
|
43
|
+
*(existing or []),
|
|
44
|
+
Middleware(
|
|
45
|
+
TransportDiagnostics,
|
|
46
|
+
path=path or fastmcp.settings.streamable_http_path,
|
|
47
|
+
),
|
|
48
|
+
]
|
|
49
|
+
if len(args) > 1:
|
|
50
|
+
args = (args[0], middleware, *args[2:])
|
|
51
|
+
else:
|
|
52
|
+
kwargs["middleware"] = middleware
|
|
53
|
+
return super().http_app(*args, **kwargs)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
@dataclass
|
|
57
|
+
class _Transfer:
|
|
58
|
+
"""Counters local to one HTTP request; never retain body data."""
|
|
59
|
+
|
|
60
|
+
request_bytes: int = 0
|
|
61
|
+
response_bytes: int = 0
|
|
62
|
+
request_complete: bool = False
|
|
63
|
+
response_complete: bool = False
|
|
64
|
+
disconnect: bool = False
|
|
65
|
+
status: int | None = None
|
|
66
|
+
error: str | None = None
|
|
67
|
+
|
|
68
|
+
def received(self, message: Message, trace: str) -> None:
|
|
69
|
+
"""Count only events delivered by the underlying receive callable."""
|
|
70
|
+
if message["type"] == "http.request":
|
|
71
|
+
self.request_bytes += len(message.get("body", b""))
|
|
72
|
+
if not message.get("more_body", False):
|
|
73
|
+
self.request_complete = True
|
|
74
|
+
logger.info("MCP HTTP trace=%s request body complete", trace)
|
|
75
|
+
elif message["type"] == "http.disconnect":
|
|
76
|
+
self.disconnect = True
|
|
77
|
+
|
|
78
|
+
def sent(self, message: Message, trace: str, started: float) -> None:
|
|
79
|
+
"""Record accepted events, including final-body handoff before app cleanup."""
|
|
80
|
+
if message["type"] == "http.response.start":
|
|
81
|
+
self.status = message["status"]
|
|
82
|
+
logger.info(
|
|
83
|
+
"MCP HTTP trace=%s response headers status=%s", trace, self.status
|
|
84
|
+
)
|
|
85
|
+
elif message["type"] == "http.response.body":
|
|
86
|
+
self.response_bytes += len(message.get("body", b""))
|
|
87
|
+
self.response_complete = not message.get("more_body", False)
|
|
88
|
+
if self.response_complete:
|
|
89
|
+
logger.info(
|
|
90
|
+
"MCP HTTP trace=%s response body complete response_bytes=%d elapsed_ms=%.1f",
|
|
91
|
+
trace,
|
|
92
|
+
self.response_bytes,
|
|
93
|
+
(monotonic() - started) * 1000,
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
def _declared_length(scope: Scope) -> int | None:
|
|
98
|
+
"""Read only a bounded numeric length, never log arbitrary header text."""
|
|
99
|
+
for name, value in scope.get("headers", []):
|
|
100
|
+
if name.lower() == b"content-length":
|
|
101
|
+
if len(value) <= 20 and value.isdigit():
|
|
102
|
+
return int(value)
|
|
103
|
+
return None
|
|
104
|
+
return None
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
class TransportDiagnostics:
|
|
108
|
+
"""Observe the MCP HTTP boundary without buffering or altering messages.
|
|
109
|
+
|
|
110
|
+
Completion means ASGI accepted the final body event, not that the client
|
|
111
|
+
received or processed it. No paths, headers, request IDs supplied by clients,
|
|
112
|
+
bodies or exception messages are logged. Other HTTP routes are untouched.
|
|
113
|
+
"""
|
|
114
|
+
|
|
115
|
+
def __init__(self, app: ASGIApp, path: str) -> None:
|
|
116
|
+
self.app = app
|
|
117
|
+
self.path = path.rstrip("/")
|
|
118
|
+
|
|
119
|
+
async def __call__(self, scope: Scope, receive: Receive, send: Send) -> None:
|
|
120
|
+
if scope["type"] != "http" or scope["path"].rstrip("/") != self.path:
|
|
121
|
+
await self.app(scope, receive, send)
|
|
122
|
+
return
|
|
123
|
+
|
|
124
|
+
transfer = _Transfer()
|
|
125
|
+
trace = uuid4().hex[:16]
|
|
126
|
+
started = monotonic()
|
|
127
|
+
declared = _declared_length(scope)
|
|
128
|
+
logger.info("MCP HTTP trace=%s started declared_bytes=%s", trace, declared)
|
|
129
|
+
|
|
130
|
+
async def receive_observed() -> Message:
|
|
131
|
+
message = await receive()
|
|
132
|
+
transfer.received(message, trace)
|
|
133
|
+
return message
|
|
134
|
+
|
|
135
|
+
async def send_observed(message: Message) -> None:
|
|
136
|
+
await send(message)
|
|
137
|
+
transfer.sent(message, trace, started)
|
|
138
|
+
|
|
139
|
+
try:
|
|
140
|
+
await self.app(scope, receive_observed, send_observed)
|
|
141
|
+
except BaseException as exc:
|
|
142
|
+
# Cancellation is diagnostic too; always preserve the original exit.
|
|
143
|
+
transfer.error = type(exc).__name__
|
|
144
|
+
raise
|
|
145
|
+
finally:
|
|
146
|
+
logger.info(
|
|
147
|
+
"MCP HTTP trace=%s finished elapsed_ms=%.1f declared_bytes=%s "
|
|
148
|
+
"request_bytes=%d request_complete=%s status=%s "
|
|
149
|
+
"response_bytes=%d response_complete=%s disconnect=%s error=%s",
|
|
150
|
+
trace,
|
|
151
|
+
(monotonic() - started) * 1000,
|
|
152
|
+
declared,
|
|
153
|
+
transfer.request_bytes,
|
|
154
|
+
transfer.request_complete,
|
|
155
|
+
transfer.status,
|
|
156
|
+
transfer.response_bytes,
|
|
157
|
+
transfer.response_complete,
|
|
158
|
+
transfer.disconnect,
|
|
159
|
+
transfer.error,
|
|
160
|
+
)
|
|
@@ -14,13 +14,13 @@ from pathlib import Path
|
|
|
14
14
|
from typing import TYPE_CHECKING, Annotated, Any, ClassVar
|
|
15
15
|
|
|
16
16
|
import yaml # type: ignore[import-untyped]
|
|
17
|
-
from fastmcp import FastMCP
|
|
18
17
|
from mcp.types import Icon
|
|
19
18
|
from pydantic import Field
|
|
20
19
|
|
|
21
20
|
from .config import _PACKAGE_VERSION, get_global_settings
|
|
22
21
|
from .errors import ErrorCode, create_error_response
|
|
23
22
|
from .hacs_auto_refresh import hacs_refresh_lifespan
|
|
23
|
+
from .http_transport import HttpTransportFastMCP as FastMCP
|
|
24
24
|
from .tools.helpers import raise_tool_error
|
|
25
25
|
from .transforms import DEFAULT_PINNED_TOOLS
|
|
26
26
|
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/locales/en.json
RENAMED
|
@@ -448,6 +448,10 @@
|
|
|
448
448
|
"advanced.mcp_server_version.help": "Defaults to the package version. Overriding may confuse clients. Restart required.",
|
|
449
449
|
"advanced.environment.label": "Environment",
|
|
450
450
|
"advanced.environment.help": "development or production. Affects logging verbosity. Restart required.",
|
|
451
|
+
"advanced.http_transport_diagnostics.label": "HTTP transport diagnostics",
|
|
452
|
+
"advanced.http_transport_diagnostics.help": "Experimental. Log MCP HTTP byte counts, timing and completion at INFO level, without payloads or credentials. Does not confirm client receipt. HTTP only; restart required.",
|
|
453
|
+
"advanced.http_json_response.label": "JSON responses instead of streaming",
|
|
454
|
+
"advanced.http_json_response.help": "Experimental. Return a single JSON response instead of an SSE stream. Affects all HTTP clients on this server and disables streamed progress for these responses. HTTP only; restart required.",
|
|
451
455
|
"advanced.log_level.label": "Log level",
|
|
452
456
|
"advanced.log_level.help": "DEBUG/INFO/WARNING/ERROR/CRITICAL. Restart required.",
|
|
453
457
|
"advanced.debug.label": "Debug mode",
|
|
@@ -3981,6 +3981,8 @@ const ADVANCED_FIELD_META = {
|
|
|
3981
3981
|
environment: { label: "Environment", help: "'development' or 'production'. Affects logging verbosity. Restart required." },
|
|
3982
3982
|
log_level: { label: "Log level", help: "DEBUG/INFO/WARNING/ERROR/CRITICAL. Set once at startup; restart required." },
|
|
3983
3983
|
debug: { label: "Debug mode", help: "Verbose request logging. Logs sensitive data; do not enable in production. Restart required." },
|
|
3984
|
+
http_transport_diagnostics: { label: "HTTP transport diagnostics", help: "Experimental. Log MCP HTTP byte counts, timing and completion at INFO level, without payloads or credentials. Does not confirm client receipt. HTTP only; restart required." },
|
|
3985
|
+
http_json_response: { label: "JSON responses instead of streaming", help: "Experimental. Return a single JSON response instead of an SSE stream. Affects all HTTP clients on this server and disables streamed progress for these responses. HTTP only; restart required." },
|
|
3984
3986
|
code_mode_max_duration: { label: "Code-mode max duration (s)", help: "Wall-clock budget per sandbox run. Range 1–300. Restart required." },
|
|
3985
3987
|
code_mode_max_memory: { label: "Code-mode max memory (bytes)", help: "RSS cap per sandbox run. Range 1 MB–256 MB. Restart required." },
|
|
3986
3988
|
code_mode_max_recursion: { label: "Code-mode max recursion", help: "Recursion-depth cap per sandbox run. Restart required." },
|
|
@@ -4002,6 +4004,7 @@ const ADVANCED_RESTART_REQUIRED = new Set([
|
|
|
4002
4004
|
"ha_tool_concurrency",
|
|
4003
4005
|
"enabled_tool_modules", "enable_websocket",
|
|
4004
4006
|
"log_level", "debug",
|
|
4007
|
+
"http_transport_diagnostics", "http_json_response",
|
|
4005
4008
|
"mcp_server_name", "mcp_server_version", "environment",
|
|
4006
4009
|
// fuzzy_threshold is read once by SmartSearchTools at the
|
|
4007
4010
|
// lazy-init singleton (tools/smart_search/) — changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/VENDORED
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/__init__.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/__main__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/client.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/connection.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/exceptions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/frames.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/headers.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/http11.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/imports.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/legacy/auth.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/legacy/client.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/legacy/http.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/legacy/server.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/protocol.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/proxy.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/py.typed
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/server.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/streams.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/sync/__init__.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/sync/client.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/sync/messages.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/sync/router.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/sync/server.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/sync/utils.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/trio/__init__.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/trio/client.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/trio/messages.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/trio/router.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/trio/server.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/trio/utils.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/typing.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/utils.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/version.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/client/supervisor_client.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/client/websocket_listener.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/dashboard_screenshot/__init__.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/dashboard_screenshot/capture.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/dashboard_screenshot/content.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/dashboard_screenshot/paths.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/dashboard_screenshot/provision.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/dashboard_screenshot/theme_guard.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/AGENTS.md
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/CLAUDE.md
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/LICENSE
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/README.md
RENAMED
|
File without changes
|