ha-mcp-dev 8.4.3.dev2624__tar.gz → 8.4.3.dev2625__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.dev2625}/PKG-INFO +1 -1
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/pyproject.toml +1 -1
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/config.py +16 -0
- ha_mcp_dev-8.4.3.dev2625/src/ha_mcp/http_transport.py +160 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/server.py +1 -1
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/settings_ui/locales/en.json +4 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/settings_ui/settings.js +3 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625/src/ha_mcp_dev.egg-info}/PKG-INFO +1 -1
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp_dev.egg-info/SOURCES.txt +1 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/LICENSE +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/MANIFEST.in +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/README.md +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/setup.cfg +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/__main__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_pypi_marker +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_rich_compat.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/requirements.txt +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/client.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/server.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/version.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_version.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/auth/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/auth/consent_form.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/auth/oidc_compat.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/auth/provider.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/backup_manager.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/browser_landing.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/client/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/client/rest_client.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/client/supervisor_client.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/client/websocket_client.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/client/websocket_listener.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/errors.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/ha_request_queue.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/hacs_auto_refresh.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/llm_exposure.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/log_filters.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/policy/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/policy/approval_queue.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/policy/editing.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/policy/evaluator.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/policy/handlers.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/policy/middleware.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/policy/model.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/policy/persistence.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/policy/value_sources.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/py.typed +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/read_only.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/redaction.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/renamed_tools.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/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.dev2625}/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.dev2625}/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.dev2625}/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.dev2625}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/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.dev2625}/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.dev2625}/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.dev2625}/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.dev2625}/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.dev2625}/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.dev2625}/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.dev2625}/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.dev2625}/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.dev2625}/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.dev2625}/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.dev2625}/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.dev2625}/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.dev2625}/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.dev2625}/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.dev2625}/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.dev2625}/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.dev2625}/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.dev2625}/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.dev2625}/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.dev2625}/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.dev2625}/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.dev2625}/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.dev2625}/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.dev2625}/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.dev2625}/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.dev2625}/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.dev2625}/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.dev2625}/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.dev2625}/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.dev2625}/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.dev2625}/src/ha_mcp/settings_ui/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/settings_ui/_i18n.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/settings_ui/_persistence.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/settings_ui/_theme.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/settings_ui/locales/README.md +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/settings_ui/locales/de.json +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/settings_ui/locales/es.json +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/settings_ui/locales/it.json +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/settings_ui/settings.css +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/settings_ui/settings.html +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/smoke_test.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/strict_bps.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tool_dispatch.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/auto_backup.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/backup.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/best_practice_checker.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/best_practice_result.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/best_practice_variables.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/blueprint_sources.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/blueprint_write.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/bulk_selector.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/component_api.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/component_config_entries.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/component_config_reads.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/component_devices.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/component_registries.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/config_entry_flow.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/config_entry_identity.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/device_control.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/error_log_parsing.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/hacs_registration.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/helpers.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/log_common.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/log_sources.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/log_sources_fault.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/radio/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/radio/base.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/radio/matter.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/radio/thread.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/radio/zigbee.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/radio/zwave.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/reference_validator.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/registry.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/smart_search/_base.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/smart_search/_config.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/tools_addons.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/tools_areas.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/tools_blueprints.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/tools_bug_report.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/tools_calendar.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/tools_camera.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/tools_categories.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/tools_code.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/tools_config_automations.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/tools_dev.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/tools_energy.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/tools_entities.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/tools_filesystem.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/tools_groups.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/tools_hacs.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/tools_history.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/tools_integrations.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/tools_labels.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/tools_logs.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/tools_radio.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/tools_registry.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/tools_resources.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/tools_search.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/tools_security_policy.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/tools_service.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/tools_services.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/tools_system.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/tools_themes.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/tools_todo.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/tools_traces.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/tools_updates.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/tools_utility.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/tools_zones.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/util_helpers.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/tools/validation_middleware.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/transforms/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/transforms/categorized_search.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/transport_security.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/update_check.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/utils/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/utils/config_hash.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/utils/config_write_lock.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/utils/dashboard_patch.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/utils/data_paths.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/utils/domain_handlers.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/utils/entity_membership.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/utils/fuzzy_search.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/utils/operation_manager.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/utils/python_sandbox.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/utils/skill_loader.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/utils/usage_logger.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/visibility/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/visibility/enforcement.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/visibility/model.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/visibility/persistence.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/visibility/resolver.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/tests/__init__.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/tests/test_constants.py +0 -0
- {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/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.dev2625"
|
|
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
|
|
@@ -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.dev2625}/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
|
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/VENDORED
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/__init__.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/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.dev2625}/src/ha_mcp/_vendor/websockets/client.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/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.dev2625}/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.dev2625}/src/ha_mcp/_vendor/websockets/frames.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/headers.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/http11.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/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.dev2625}/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.dev2625}/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.dev2625}/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.dev2625}/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.dev2625}/src/ha_mcp/_vendor/websockets/protocol.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/proxy.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/py.typed
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/server.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/_vendor/websockets/streams.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/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.dev2625}/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.dev2625}/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.dev2625}/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.dev2625}/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.dev2625}/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.dev2625}/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.dev2625}/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.dev2625}/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.dev2625}/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.dev2625}/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.dev2625}/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.dev2625}/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.dev2625}/src/ha_mcp/_vendor/websockets/utils.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/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.dev2625}/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.dev2625}/src/ha_mcp/client/websocket_listener.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/dashboard_screenshot/__init__.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/dashboard_screenshot/capture.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/dashboard_screenshot/content.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/dashboard_screenshot/paths.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/dashboard_screenshot/provision.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/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.dev2625}/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.dev2625}/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.dev2625}/src/ha_mcp/resources/skills-vendor/LICENSE
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2625}/src/ha_mcp/resources/skills-vendor/README.md
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
|