ha-mcp-dev 8.4.1.dev2521__tar.gz → 8.4.1.dev2523__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.1.dev2521/src/ha_mcp_dev.egg-info → ha_mcp_dev-8.4.1.dev2523}/PKG-INFO +1 -1
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/pyproject.toml +1 -1
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/utils/usage_logger.py +90 -4
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523/src/ha_mcp_dev.egg-info}/PKG-INFO +1 -1
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/LICENSE +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/MANIFEST.in +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/README.md +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/setup.cfg +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/__init__.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/__main__.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_pypi_marker +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_rich_compat.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/__init__.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/requirements.txt +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/client.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/server.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/version.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_version.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/auth/__init__.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/auth/consent_form.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/auth/oidc_compat.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/auth/provider.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/backup_manager.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/browser_landing.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/client/__init__.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/client/rest_client.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/client/supervisor_client.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/client/websocket_client.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/client/websocket_listener.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/config.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/errors.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/hacs_auto_refresh.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/llm_exposure.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/log_filters.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/policy/__init__.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/policy/approval_queue.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/policy/editing.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/policy/evaluator.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/policy/handlers.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/policy/middleware.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/policy/model.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/policy/persistence.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/policy/value_sources.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/py.typed +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/read_only.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/redaction.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/renamed_tools.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/resources/skills-vendor/.github/pull_request_template.md +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/resources/skills-vendor/evals/area-target-over-entity-list/case.yaml +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/resources/skills-vendor/evals/arrive-home-automation/case.yaml +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/resources/skills-vendor/evals/assist-shortcut-card/case.yaml +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/resources/skills-vendor/evals/avg-temperature/case.yaml +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/resources/skills-vendor/evals/backup-deletion-confirmation/case.yaml +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/resources/skills-vendor/evals/blueprint-authoring/case.yaml +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/resources/skills-vendor/evals/button-event-entity/case.yaml +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/resources/skills-vendor/evals/device-id-trigger-migration/case.yaml +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/resources/skills-vendor/evals/helper-flow-fields-not-platform-yaml/case.yaml +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/resources/skills-vendor/evals/media-player-song/case.yaml +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/resources/skills-vendor/evals/motion-light-automation-mode/case.yaml +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/resources/skills-vendor/evals/rename-entity-impact-analysis/case.yaml +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/resources/skills-vendor/evals/template-attributes-yaml-exception/case.yaml +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/resources/skills-vendor/evals/timer-finished-automation/case.yaml +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/resources/skills-vendor/evals/vacuum-last-clean/case.yaml +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/resources/skills-vendor/scripts/check_eval_cases.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/server.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/settings_ui/__init__.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/settings_ui/_i18n.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/settings_ui/_persistence.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/settings_ui/_theme.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/settings_ui/locales/README.md +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/settings_ui/locales/de.json +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/settings_ui/locales/en.json +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/settings_ui/locales/es.json +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/settings_ui/locales/it.json +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/settings_ui/settings.css +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/settings_ui/settings.html +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/settings_ui/settings.js +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/smoke_test.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/strict_bps.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/__init__.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/auto_backup.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/backup.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/best_practice_checker.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/best_practice_result.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/best_practice_variables.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/bulk_selector.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/component_api.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/component_config_entries.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/component_config_reads.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/component_devices.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/component_registries.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/config_entry_flow.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/config_entry_identity.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/device_control.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/error_log_parsing.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/hacs_registration.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/helpers.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/log_common.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/log_sources.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/radio/__init__.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/radio/base.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/radio/matter.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/radio/thread.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/radio/zigbee.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/radio/zwave.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/reference_validator.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/registry.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/smart_search/_base.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/smart_search/_config.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/tools_addons.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/tools_areas.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/tools_blueprints.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/tools_bug_report.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/tools_calendar.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/tools_camera.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/tools_categories.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/tools_code.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/tools_config_automations.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/tools_dev.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/tools_energy.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/tools_entities.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/tools_filesystem.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/tools_groups.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/tools_hacs.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/tools_history.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/tools_integrations.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/tools_labels.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/tools_logs.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/tools_radio.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/tools_registry.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/tools_resources.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/tools_search.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/tools_security_policy.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/tools_service.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/tools_services.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/tools_system.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/tools_themes.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/tools_todo.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/tools_traces.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/tools_updates.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/tools_utility.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/tools_zones.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/util_helpers.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/tools/validation_middleware.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/transforms/__init__.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/transforms/categorized_search.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/transport_security.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/update_check.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/utils/__init__.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/utils/config_hash.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/utils/config_write_lock.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/utils/data_paths.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/utils/domain_handlers.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/utils/entity_membership.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/utils/fuzzy_search.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/utils/operation_manager.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/utils/python_sandbox.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/utils/skill_loader.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/visibility/__init__.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/visibility/enforcement.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/visibility/model.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/visibility/persistence.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/visibility/resolver.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp_dev.egg-info/SOURCES.txt +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/tests/__init__.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/tests/test_constants.py +0 -0
- {ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/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.1.
|
|
7
|
+
version = "8.4.1.dev2523"
|
|
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
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Usage logging for MCP tool calls to track usage patterns and performance metrics.
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
|
+
import copy
|
|
5
6
|
import json
|
|
6
7
|
import logging
|
|
7
8
|
import threading
|
|
@@ -29,6 +30,13 @@ AVG_LOG_ENTRIES_PER_TOOL = 3
|
|
|
29
30
|
# Startup log collection duration in seconds
|
|
30
31
|
STARTUP_LOG_DURATION_SECONDS = 60
|
|
31
32
|
|
|
33
|
+
# Hard cap on collected startup entries. The collector sits on the root logger
|
|
34
|
+
# at DEBUG with no filter, so an instance with `logger:` debug overrides on a
|
|
35
|
+
# chatty integration can emit tens of thousands of records inside the window.
|
|
36
|
+
# Keep the earliest ones — ha_report_issue's startup diagnostics care about the
|
|
37
|
+
# boot sequence, and the tail of a debug flood is noise.
|
|
38
|
+
MAX_STARTUP_LOG_ENTRIES = 5000
|
|
39
|
+
|
|
32
40
|
|
|
33
41
|
class StartupLogCollector(logging.Handler):
|
|
34
42
|
"""Collects log messages during the first minute of server startup."""
|
|
@@ -40,32 +48,110 @@ class StartupLogCollector(logging.Handler):
|
|
|
40
48
|
self._logs: list[dict[str, Any]] = []
|
|
41
49
|
self._lock = threading.Lock()
|
|
42
50
|
self._active = True
|
|
51
|
+
# Per-thread, not an instance flag: emit() runs on every thread that
|
|
52
|
+
# logs, and a shared flag would drop unrelated records from other
|
|
53
|
+
# threads while one thread is mid-format.
|
|
54
|
+
self._formatting = threading.local()
|
|
55
|
+
# Nested records the guard dropped; surfaced by get_logs() so the
|
|
56
|
+
# startup diagnostics show the hole instead of hiding it.
|
|
57
|
+
self._dropped_nested = 0
|
|
43
58
|
|
|
44
59
|
def emit(self, record: logging.LogRecord) -> None:
|
|
45
|
-
"""Capture log record if within startup window.
|
|
60
|
+
"""Capture log record if within startup window.
|
|
61
|
+
|
|
62
|
+
``record.getMessage()`` is deliberately called OUTSIDE ``self._lock``
|
|
63
|
+
and under a per-thread reentrancy guard. Formatting a record runs
|
|
64
|
+
arbitrary third-party code: ``%s`` of an entity invokes
|
|
65
|
+
``Entity.__repr__`` -> ``_stringify_state`` -> the entity's ``state``
|
|
66
|
+
property, and an integration whose property logs at debug re-enters
|
|
67
|
+
this handler on the same thread. This handler runs in-process with
|
|
68
|
+
Home Assistant in embedded mode, so that thread is the event loop.
|
|
69
|
+
|
|
70
|
+
Formatting inside the lock made that re-entry a hard self-deadlock on a
|
|
71
|
+
non-reentrant ``threading.Lock``, freezing the whole HA process — no
|
|
72
|
+
port 8123, no recorder writes, and no log line explaining it, because
|
|
73
|
+
the freeze happens inside logging itself (#2357).
|
|
74
|
+
"""
|
|
46
75
|
if not self._active:
|
|
47
76
|
return
|
|
48
77
|
|
|
78
|
+
# Nested emit from within our own formatting: drop the record rather
|
|
79
|
+
# than recurse. The outer record still gets collected, and the chain
|
|
80
|
+
# (repr -> log -> repr -> log) cannot run away. The lock is free on
|
|
81
|
+
# this path (formatting happens outside it), so counting is safe.
|
|
82
|
+
if getattr(self._formatting, "active", False):
|
|
83
|
+
with self._lock:
|
|
84
|
+
self._dropped_nested += 1
|
|
85
|
+
return
|
|
86
|
+
|
|
49
87
|
elapsed = time.time() - self._start_time
|
|
50
88
|
if elapsed > self._duration:
|
|
51
89
|
self._active = False
|
|
52
90
|
return
|
|
53
91
|
|
|
92
|
+
self._formatting.active = True
|
|
93
|
+
try:
|
|
94
|
+
message = record.getMessage()
|
|
95
|
+
except Exception as exc:
|
|
96
|
+
# Mirrors logging's own contract: a handler never propagates. Only
|
|
97
|
+
# attributes the logging machinery itself set are interpolated —
|
|
98
|
+
# ``exc``'s repr or ``record.msg`` could run the code that just
|
|
99
|
+
# failed. pathname:lineno names the broken call site, which the
|
|
100
|
+
# logger name alone does not.
|
|
101
|
+
message = (
|
|
102
|
+
f"<unformattable record from {record.pathname}:{record.lineno}: "
|
|
103
|
+
f"{type(exc).__name__}>"
|
|
104
|
+
)
|
|
105
|
+
# Honour the stdlib path too (logging.raiseExceptions / stderr);
|
|
106
|
+
# at DEBUG on root this may be the only handler that saw the record.
|
|
107
|
+
# Hand it a copy carrying the synthetic message and no args:
|
|
108
|
+
# handleError() formats ``record.args`` again and re-raises a
|
|
109
|
+
# RecursionError from that, which would escape into the caller.
|
|
110
|
+
safe = copy.copy(record)
|
|
111
|
+
safe.msg = message
|
|
112
|
+
safe.args = ()
|
|
113
|
+
self.handleError(safe)
|
|
114
|
+
finally:
|
|
115
|
+
self._formatting.active = False
|
|
116
|
+
|
|
54
117
|
with self._lock:
|
|
118
|
+
if len(self._logs) >= MAX_STARTUP_LOG_ENTRIES:
|
|
119
|
+
self._active = False
|
|
120
|
+
return
|
|
55
121
|
self._logs.append(
|
|
56
122
|
{
|
|
57
123
|
"timestamp": datetime.now(UTC).isoformat(),
|
|
58
124
|
"level": record.levelname,
|
|
59
125
|
"logger": record.name,
|
|
60
|
-
"message":
|
|
126
|
+
"message": message,
|
|
61
127
|
"elapsed_seconds": round(elapsed, 2),
|
|
62
128
|
}
|
|
63
129
|
)
|
|
64
130
|
|
|
65
131
|
def get_logs(self) -> list[dict[str, Any]]:
|
|
66
|
-
"""Get collected startup logs.
|
|
132
|
+
"""Get collected startup logs.
|
|
133
|
+
|
|
134
|
+
If the reentrancy guard dropped any nested records, one synthetic
|
|
135
|
+
trailing entry says how many, so a reader of the diagnostics can tell
|
|
136
|
+
"the integration logged nothing" from "records were swallowed".
|
|
137
|
+
"""
|
|
67
138
|
with self._lock:
|
|
68
|
-
|
|
139
|
+
logs = list(self._logs)
|
|
140
|
+
dropped = self._dropped_nested
|
|
141
|
+
if dropped:
|
|
142
|
+
logs.append(
|
|
143
|
+
{
|
|
144
|
+
"timestamp": datetime.now(UTC).isoformat(),
|
|
145
|
+
"level": "WARNING",
|
|
146
|
+
"logger": __name__,
|
|
147
|
+
"message": (
|
|
148
|
+
f"<{dropped} nested log record(s) emitted during message "
|
|
149
|
+
"formatting were dropped by the reentrancy guard>"
|
|
150
|
+
),
|
|
151
|
+
"elapsed_seconds": round(time.time() - self._start_time, 2),
|
|
152
|
+
}
|
|
153
|
+
)
|
|
154
|
+
return logs
|
|
69
155
|
|
|
70
156
|
def is_active(self) -> bool:
|
|
71
157
|
"""Check if still collecting startup logs."""
|
|
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.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/VENDORED
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/__init__.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/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.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/client.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/connection.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/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.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/frames.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/headers.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/http11.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/imports.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/legacy/auth.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/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.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/legacy/http.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/legacy/server.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/protocol.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/proxy.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/py.typed
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/server.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/streams.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/sync/__init__.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/sync/client.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/sync/messages.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/sync/router.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/sync/server.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/sync/utils.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/trio/__init__.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/trio/client.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/trio/messages.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/trio/router.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/trio/server.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/trio/utils.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/typing.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/_vendor/websockets/utils.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/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.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/client/supervisor_client.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/client/websocket_listener.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/dashboard_screenshot/__init__.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/dashboard_screenshot/capture.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/dashboard_screenshot/content.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/dashboard_screenshot/paths.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/dashboard_screenshot/provision.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/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
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/resources/skills-vendor/AGENTS.md
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/resources/skills-vendor/CLAUDE.md
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/resources/skills-vendor/LICENSE
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/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
|
|
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.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/settings_ui/_handlers_advanced.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/settings_ui/_handlers_backups.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/settings_ui/_handlers_fs.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/settings_ui/_handlers_server.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/settings_ui/_handlers_theme.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/settings_ui/_handlers_tools.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/settings_ui/_locale_policy.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/settings_ui/_persistence.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/settings_ui/locales/README.md
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/settings_ui/locales/cs.json
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/settings_ui/locales/de.json
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/settings_ui/locales/en.json
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/settings_ui/locales/eo.json
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/settings_ui/locales/es.json
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/settings_ui/locales/fr.json
RENAMED
|
File without changes
|
{ha_mcp_dev-8.4.1.dev2521 → ha_mcp_dev-8.4.1.dev2523}/src/ha_mcp/settings_ui/locales/it.json
RENAMED
|
File without changes
|