ha-mcp-dev 8.1.1.dev2286__tar.gz → 8.1.1.dev2287__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.1.1.dev2286/src/ha_mcp_dev.egg-info → ha_mcp_dev-8.1.1.dev2287}/PKG-INFO +1 -1
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/pyproject.toml +1 -1
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/__main__.py +1 -8
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/hacs_auto_refresh.py +45 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/server.py +2 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287/src/ha_mcp_dev.egg-info}/PKG-INFO +1 -1
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/LICENSE +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/MANIFEST.in +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/README.md +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/setup.cfg +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/__init__.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_pypi_marker +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/__init__.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/requirements.txt +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/client.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/server.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/version.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_version.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/auth/__init__.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/auth/consent_form.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/auth/provider.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/backup_manager.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/browser_landing.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/client/__init__.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/client/rest_client.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/client/supervisor_client.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/client/websocket_client.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/client/websocket_listener.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/config.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/errors.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/llm_exposure.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/policy/__init__.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/policy/approval_queue.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/policy/editing.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/policy/evaluator.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/policy/handlers.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/policy/middleware.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/policy/model.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/policy/persistence.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/policy/value_sources.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/py.typed +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/read_only.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/redaction.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/resources/skills-vendor/.github/pull_request_template.md +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/evals/evals.json +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/settings_ui/__init__.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/settings_ui/_i18n.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/settings_ui/_persistence.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/settings_ui/_theme.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/settings_ui/locales/README.md +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/settings_ui/locales/de.json +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/settings_ui/locales/en.json +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/settings_ui/locales/es.json +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/settings_ui/locales/it.json +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/settings_ui/settings.css +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/settings_ui/settings.html +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/settings_ui/settings.js +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/smoke_test.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/strict_bps.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/__init__.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/auto_backup.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/backup.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/best_practice_checker.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/best_practice_result.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/best_practice_variables.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/component_api.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/component_config_reads.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/component_devices.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/component_registries.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/config_entry_flow.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/device_control.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/hacs_registration.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/helpers.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/radio/__init__.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/radio/base.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/radio/matter.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/radio/thread.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/radio/zigbee.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/radio/zwave.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/reference_validator.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/registry.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/smart_search/_base.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/smart_search/_config.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/tools_addons.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/tools_areas.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/tools_blueprints.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/tools_bug_report.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/tools_calendar.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/tools_camera.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/tools_categories.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/tools_code.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/tools_config_automations.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/tools_dev.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/tools_energy.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/tools_entities.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/tools_filesystem.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/tools_groups.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/tools_hacs.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/tools_history.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/tools_integrations.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/tools_labels.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/tools_radio.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/tools_registry.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/tools_resources.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/tools_search.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/tools_security_policy.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/tools_service.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/tools_services.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/tools_system.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/tools_themes.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/tools_todo.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/tools_traces.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/tools_updates.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/tools_utility.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/tools_zones.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/util_helpers.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/validation_middleware.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/transforms/__init__.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/transforms/categorized_search.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/transport_security.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/update_check.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/utils/__init__.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/utils/config_hash.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/utils/config_write_lock.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/utils/data_paths.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/utils/domain_handlers.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/utils/fuzzy_search.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/utils/operation_manager.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/utils/python_sandbox.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/utils/skill_loader.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/utils/usage_logger.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/visibility/__init__.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/visibility/enforcement.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/visibility/model.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/visibility/persistence.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/visibility/resolver.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp_dev.egg-info/SOURCES.txt +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/tests/__init__.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/tests/test_constants.py +0 -0
- {ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/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.1.1.
|
|
7
|
+
version = "8.1.1.dev2287"
|
|
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
|
|
@@ -666,13 +666,6 @@ async def _run_with_shutdown(server_coro: Coroutine[Any, Any, Any]) -> None:
|
|
|
666
666
|
server_task = asyncio.create_task(server_coro)
|
|
667
667
|
shutdown_task = asyncio.create_task(_shutdown_event.wait())
|
|
668
668
|
|
|
669
|
-
# Fire-and-forget: ask HACS to surface a paired component update after a
|
|
670
|
-
# server update (advisory; see hacs_auto_refresh). Not in the wait set —
|
|
671
|
-
# its completion must not stop the server.
|
|
672
|
-
from ha_mcp.hacs_auto_refresh import maybe_refresh_hacs_after_update
|
|
673
|
-
|
|
674
|
-
hacs_refresh_task = asyncio.create_task(maybe_refresh_hacs_after_update())
|
|
675
|
-
|
|
676
669
|
try:
|
|
677
670
|
done, pending = await asyncio.wait(
|
|
678
671
|
[server_task, shutdown_task],
|
|
@@ -732,7 +725,7 @@ async def _run_with_shutdown(server_coro: Coroutine[Any, Any, Any]) -> None:
|
|
|
732
725
|
logger.warning("Resource cleanup timed out")
|
|
733
726
|
|
|
734
727
|
try:
|
|
735
|
-
await _cancel_tasks(server_task, shutdown_task
|
|
728
|
+
await _cancel_tasks(server_task, shutdown_task)
|
|
736
729
|
except Exception as e:
|
|
737
730
|
# Teardown must never mask the exception being propagated from the
|
|
738
731
|
# try block (Python drops the original if finally raises).
|
|
@@ -25,6 +25,8 @@ import asyncio
|
|
|
25
25
|
import hashlib
|
|
26
26
|
import json
|
|
27
27
|
import logging
|
|
28
|
+
from collections.abc import AsyncIterator
|
|
29
|
+
from contextlib import asynccontextmanager, suppress
|
|
28
30
|
from pathlib import Path
|
|
29
31
|
from typing import Any
|
|
30
32
|
|
|
@@ -222,8 +224,28 @@ async def maybe_refresh_hacs_after_update() -> None:
|
|
|
222
224
|
info = await asyncio.to_thread(get_update_info)
|
|
223
225
|
marker = await asyncio.to_thread(_read_marker, ha_url)
|
|
224
226
|
if not _nudge_due(current, info, marker):
|
|
227
|
+
# DEBUG, not INFO: the not-due return is the per-conversation
|
|
228
|
+
# stdio hot path and must stay quiet at default levels. The line
|
|
229
|
+
# exists so a DEBUG-level launcher (the HAOS add-on lane) can
|
|
230
|
+
# prove scheduling even when a completed earlier pass makes every
|
|
231
|
+
# later boot legitimately not due.
|
|
232
|
+
logger.debug(
|
|
233
|
+
"HACS auto-refresh: pass not due (marker current for server %s)",
|
|
234
|
+
current,
|
|
235
|
+
)
|
|
225
236
|
return
|
|
226
237
|
|
|
238
|
+
# The one unconditional line a due pass emits BEFORE any WebSocket
|
|
239
|
+
# work: it proves the launcher scheduled the nudge even where HACS
|
|
240
|
+
# is absent and the pass ends silently — the observable the HAOS
|
|
241
|
+
# add-on lane greps for, and the line whose absence exposed the
|
|
242
|
+
# launcher gap this module's lifespan wiring closed.
|
|
243
|
+
logger.info(
|
|
244
|
+
"HACS auto-refresh: startup pass due (server %s); "
|
|
245
|
+
"asking HACS for repository state",
|
|
246
|
+
current,
|
|
247
|
+
)
|
|
248
|
+
|
|
227
249
|
result = await _refresh_with_retries()
|
|
228
250
|
if result is None:
|
|
229
251
|
logger.debug(
|
|
@@ -250,3 +272,26 @@ async def maybe_refresh_hacs_after_update() -> None:
|
|
|
250
272
|
raise
|
|
251
273
|
except Exception:
|
|
252
274
|
logger.debug("HACS auto-refresh nudge skipped", exc_info=True)
|
|
275
|
+
|
|
276
|
+
|
|
277
|
+
@asynccontextmanager
|
|
278
|
+
async def hacs_refresh_lifespan(_server: Any) -> AsyncIterator[dict[str, Any]]:
|
|
279
|
+
"""Schedule the startup nudge for the lifetime of any server run.
|
|
280
|
+
|
|
281
|
+
Attached as the FastMCP ``lifespan`` so it runs on EVERY launcher —
|
|
282
|
+
stdio, the HTTP CLI entry points, and the add-on's ``start.py``, which
|
|
283
|
+
calls ``mcp.run()`` directly and never passes through ``__main__``'s
|
|
284
|
+
``_run_with_shutdown`` (the wiring this replaces; the add-on gap was
|
|
285
|
+
found live, not by CI, because the e2e suites launch via the CLI
|
|
286
|
+
entry points).
|
|
287
|
+
"""
|
|
288
|
+
task = asyncio.create_task(maybe_refresh_hacs_after_update())
|
|
289
|
+
try:
|
|
290
|
+
yield {}
|
|
291
|
+
finally:
|
|
292
|
+
# The nudge may be mid-retry-sleep; a cancelled task must not
|
|
293
|
+
# stall shutdown. maybe_refresh_hacs_after_update re-raises
|
|
294
|
+
# CancelledError by design, so this await returns promptly.
|
|
295
|
+
task.cancel()
|
|
296
|
+
with suppress(asyncio.CancelledError):
|
|
297
|
+
await task
|
|
@@ -20,6 +20,7 @@ from pydantic import Field
|
|
|
20
20
|
|
|
21
21
|
from .config import _PACKAGE_VERSION, get_global_settings
|
|
22
22
|
from .errors import ErrorCode, create_error_response
|
|
23
|
+
from .hacs_auto_refresh import hacs_refresh_lifespan
|
|
23
24
|
from .tools.helpers import raise_tool_error
|
|
24
25
|
from .transforms import DEFAULT_PINNED_TOOLS
|
|
25
26
|
|
|
@@ -142,6 +143,7 @@ class HomeAssistantSmartMCPServer:
|
|
|
142
143
|
version=server_version,
|
|
143
144
|
icons=SERVER_ICONS,
|
|
144
145
|
instructions=instructions,
|
|
146
|
+
lifespan=hacs_refresh_lifespan,
|
|
145
147
|
)
|
|
146
148
|
|
|
147
149
|
# Register all tools and expert prompts
|
|
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.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/VENDORED
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/__init__.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/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.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/client.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/connection.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/exceptions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/frames.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/headers.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/http11.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/imports.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/legacy/auth.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/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.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/legacy/http.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/legacy/server.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/protocol.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/proxy.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/py.typed
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/server.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/streams.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/sync/__init__.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/sync/client.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/sync/messages.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/sync/router.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/sync/server.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/sync/utils.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/trio/__init__.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/trio/client.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/trio/messages.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/trio/router.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/trio/server.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/trio/utils.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/typing.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/_vendor/websockets/utils.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/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
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/client/supervisor_client.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/client/websocket_listener.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/dashboard_screenshot/__init__.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/dashboard_screenshot/capture.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/dashboard_screenshot/content.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/dashboard_screenshot/paths.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/dashboard_screenshot/provision.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/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
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/resources/skills-vendor/AGENTS.md
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/resources/skills-vendor/CLAUDE.md
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/resources/skills-vendor/LICENSE
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/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
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/settings_ui/_handlers_advanced.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/settings_ui/_handlers_backups.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/settings_ui/_handlers_fs.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/settings_ui/_handlers_server.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/settings_ui/_handlers_theme.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/settings_ui/_handlers_tools.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/settings_ui/_persistence.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/settings_ui/locales/README.md
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/settings_ui/locales/de.json
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/settings_ui/locales/en.json
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/settings_ui/locales/es.json
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/settings_ui/locales/fr.json
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/settings_ui/locales/it.json
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/settings_ui/locales/nl.json
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/settings_ui/locales/pl.json
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/settings_ui/locales/ru.json
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/settings_ui/locales/sv.json
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/settings_ui/locales/zh-Hans.json
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.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/best_practice_checker.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/best_practice_result.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/best_practice_variables.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/component_config_reads.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/component_registries.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/component_registry_lookup.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/config_entry_flow_form.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/config_entry_flow_menu.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/config_entry_flow_walker.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.1.1.dev2286 → ha_mcp_dev-8.1.1.dev2287}/src/ha_mcp/tools/reference_validator.py
RENAMED
|
File without changes
|