ha-mcp-dev 7.14.1.dev2072__tar.gz → 7.14.2.dev2081__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-7.14.1.dev2072/src/ha_mcp_dev.egg-info → ha_mcp_dev-7.14.2.dev2081}/PKG-INFO +1 -1
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/pyproject.toml +1 -1
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/client/websocket_client.py +94 -18
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +1 -1
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +1 -1
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/resources/skills-vendor/README.md +17 -5
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081/src/ha_mcp_dev.egg-info}/PKG-INFO +1 -1
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/LICENSE +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/MANIFEST.in +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/README.md +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/setup.cfg +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/__init__.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/__main__.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/_pypi_marker +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/_version.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/auth/__init__.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/auth/consent_form.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/auth/provider.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/backup_manager.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/browser_landing.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/client/__init__.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/client/rest_client.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/client/supervisor_client.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/client/websocket_listener.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/config.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/errors.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/llm_exposure.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/policy/__init__.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/policy/approval_queue.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/policy/evaluator.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/policy/handlers.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/policy/middleware.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/policy/model.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/policy/persistence.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/policy/value_sources.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/py.typed +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/read_only.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/resources/skills-vendor/.github/pull_request_template.md +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/evals/evals.json +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/server.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/settings_ui/__init__.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/settings_ui/_i18n.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/settings_ui/_persistence.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/settings_ui/_theme.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/settings_ui/locales/README.md +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/settings_ui/locales/de.json +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/settings_ui/locales/en.json +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/settings_ui/settings.css +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/settings_ui/settings.html +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/settings_ui/settings.js +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/smoke_test.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/strict_bps.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/__init__.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/auto_backup.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/backup.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/best_practice_checker.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/component_api.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/component_config_reads.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/component_devices.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/component_registries.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/config_entry_flow.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/device_control.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/enhanced.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/helpers.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/radio/__init__.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/radio/base.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/radio/matter.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/radio/thread.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/radio/zigbee.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/radio/zwave.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/reference_validator.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/registry.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/smart_search/_base.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/smart_search/_config.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_addons.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_areas.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_blueprints.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_bug_report.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_calendar.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_camera.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_categories.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_code.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_config_automations.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_dev.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_energy.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_entities.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_filesystem.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_groups.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_hacs.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_history.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_integrations.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_labels.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_radio.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_registry.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_resources.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_search.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_service.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_services.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_system.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_themes.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_todo.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_traces.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_updates.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_utility.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_zones.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/util_helpers.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/validation_middleware.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/transforms/__init__.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/transforms/categorized_search.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/transport_security.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/update_check.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/utils/__init__.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/utils/config_hash.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/utils/data_paths.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/utils/domain_handlers.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/utils/fuzzy_search.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/utils/operation_manager.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/utils/python_sandbox.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/utils/skill_loader.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/utils/usage_logger.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/visibility/__init__.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/visibility/model.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/visibility/persistence.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/visibility/resolver.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp_dev.egg-info/SOURCES.txt +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/tests/__init__.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/tests/test_constants.py +0 -0
- {ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/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 = "7.14.
|
|
7
|
+
version = "7.14.2.dev2081"
|
|
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
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/client/websocket_client.py
RENAMED
|
@@ -8,6 +8,7 @@ This module handles WebSocket connections to Home Assistant for:
|
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
10
|
import asyncio
|
|
11
|
+
import concurrent.futures
|
|
11
12
|
import hashlib
|
|
12
13
|
import json
|
|
13
14
|
import logging
|
|
@@ -1036,6 +1037,21 @@ class HomeAssistantWebSocketClient:
|
|
|
1036
1037
|
MAX_POOL_SIZE = 50
|
|
1037
1038
|
|
|
1038
1039
|
|
|
1040
|
+
def _log_stale_disconnect(future: "concurrent.futures.Future[None]") -> None:
|
|
1041
|
+
"""Report how a disconnect scheduled on a stale event loop ended.
|
|
1042
|
+
|
|
1043
|
+
Nothing awaits that future, so without this the outcome would be invisible
|
|
1044
|
+
at every log level: a ``concurrent.futures.Future`` never warns about an
|
|
1045
|
+
exception no one retrieved.
|
|
1046
|
+
"""
|
|
1047
|
+
if future.cancelled():
|
|
1048
|
+
logger.debug("Stale WebSocket disconnect was cancelled with its loop")
|
|
1049
|
+
return
|
|
1050
|
+
error = future.exception()
|
|
1051
|
+
if error is not None:
|
|
1052
|
+
logger.debug("Stale WebSocket disconnect failed: %s", error)
|
|
1053
|
+
|
|
1054
|
+
|
|
1039
1055
|
class WebSocketManager:
|
|
1040
1056
|
"""Singleton manager for Home Assistant WebSocket connections.
|
|
1041
1057
|
|
|
@@ -1114,6 +1130,56 @@ class WebSocketManager:
|
|
|
1114
1130
|
)
|
|
1115
1131
|
return True
|
|
1116
1132
|
|
|
1133
|
+
@staticmethod
|
|
1134
|
+
def _release_stale_clients(
|
|
1135
|
+
clients: list[HomeAssistantWebSocketClient],
|
|
1136
|
+
loop: asyncio.AbstractEventLoop | None,
|
|
1137
|
+
) -> None:
|
|
1138
|
+
"""Best-effort cleanup of clients orphaned by an event-loop change.
|
|
1139
|
+
|
|
1140
|
+
Never awaits: the connections belong to ``loop``, and awaiting them
|
|
1141
|
+
from the loop that replaced it is exactly the cross-loop failure this
|
|
1142
|
+
avoids. Each disconnect is scheduled on the owning loop and
|
|
1143
|
+
deliberately not waited for. A merely stopped loop is scheduled too:
|
|
1144
|
+
it still owns live transports and still accepts callbacks, so the
|
|
1145
|
+
disconnect runs once that loop is resumed, and otherwise stays an
|
|
1146
|
+
unrun callback like any other the abandoned loop still holds. Only a
|
|
1147
|
+
closed or unknown loop has nothing left to schedule on; its
|
|
1148
|
+
connection is abandoned and the socket closes when the orphaned
|
|
1149
|
+
transport is garbage-collected (with a ``ResourceWarning``), because
|
|
1150
|
+
closing a loop does not close the transports it carried. Either way
|
|
1151
|
+
the caller has already detached the pool, so a failure here cannot
|
|
1152
|
+
make it stale again.
|
|
1153
|
+
"""
|
|
1154
|
+
if not clients:
|
|
1155
|
+
return
|
|
1156
|
+
if loop is None or loop.is_closed():
|
|
1157
|
+
logger.debug(
|
|
1158
|
+
"Abandoning %d stale WebSocket client(s): the owning event "
|
|
1159
|
+
"loop is gone",
|
|
1160
|
+
len(clients),
|
|
1161
|
+
)
|
|
1162
|
+
return
|
|
1163
|
+
for client in clients:
|
|
1164
|
+
coro = client.disconnect()
|
|
1165
|
+
try:
|
|
1166
|
+
future = asyncio.run_coroutine_threadsafe(coro, loop)
|
|
1167
|
+
except RuntimeError:
|
|
1168
|
+
# The loop closed between the check above and now. Closing the
|
|
1169
|
+
# coroutine keeps it from surfacing as "never awaited". The
|
|
1170
|
+
# narrower window stays open by construction: a loop that
|
|
1171
|
+
# accepts the callback and then stops before draining it never
|
|
1172
|
+
# runs the coroutine at all, and ``run_coroutine_threadsafe``
|
|
1173
|
+
# needs the coroutine object up front, so there is nothing left
|
|
1174
|
+
# to reclaim from this side.
|
|
1175
|
+
coro.close()
|
|
1176
|
+
logger.debug(
|
|
1177
|
+
"Could not schedule disconnect of a stale WebSocket client",
|
|
1178
|
+
exc_info=True,
|
|
1179
|
+
)
|
|
1180
|
+
continue
|
|
1181
|
+
future.add_done_callback(_log_stale_disconnect)
|
|
1182
|
+
|
|
1117
1183
|
async def get_client(
|
|
1118
1184
|
self,
|
|
1119
1185
|
url: str | None = None,
|
|
@@ -1143,22 +1209,21 @@ class WebSocketManager:
|
|
|
1143
1209
|
if not self._lock:
|
|
1144
1210
|
raise Exception("Lock not initialized")
|
|
1145
1211
|
async with self._lock:
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
exc_info=True,
|
|
1157
|
-
)
|
|
1212
|
+
previous_loop = self._current_loop
|
|
1213
|
+
stale_clients: list[HomeAssistantWebSocketClient] = []
|
|
1214
|
+
if previous_loop is not None and previous_loop is not current_loop:
|
|
1215
|
+
# Event loop changed: detach the pool BEFORE cleaning it up.
|
|
1216
|
+
# The pooled clients' futures belong to ``previous_loop``, so
|
|
1217
|
+
# awaiting their ``disconnect()`` here raises ``RuntimeError:
|
|
1218
|
+
# ... attached to a different loop``, which used to escape the
|
|
1219
|
+
# best-effort catch and leave both the pool and the loop
|
|
1220
|
+
# reference stale for every later call (issue #1994).
|
|
1221
|
+
stale_clients = list(self._clients.values())
|
|
1158
1222
|
self._clients.clear()
|
|
1159
1223
|
self._last_used.clear()
|
|
1160
1224
|
|
|
1161
1225
|
self._current_loop = current_loop
|
|
1226
|
+
self._release_stale_clients(stale_clients, previous_loop)
|
|
1162
1227
|
|
|
1163
1228
|
# Determine credentials to use
|
|
1164
1229
|
if url and token:
|
|
@@ -1226,7 +1291,7 @@ class WebSocketManager:
|
|
|
1226
1291
|
if stale:
|
|
1227
1292
|
try:
|
|
1228
1293
|
await stale.disconnect()
|
|
1229
|
-
except (OSError, asyncio.CancelledError):
|
|
1294
|
+
except (OSError, RuntimeError, asyncio.CancelledError):
|
|
1230
1295
|
logger.warning(
|
|
1231
1296
|
"Error disconnecting evicted WebSocket client",
|
|
1232
1297
|
exc_info=True,
|
|
@@ -1239,16 +1304,27 @@ class WebSocketManager:
|
|
|
1239
1304
|
if not self._lock:
|
|
1240
1305
|
raise Exception("Lock not initialized")
|
|
1241
1306
|
async with self._lock:
|
|
1242
|
-
|
|
1307
|
+
# Detach the pool before disconnecting so a raising disconnect
|
|
1308
|
+
# cannot leave it populated (the bookkeeping half of the
|
|
1309
|
+
# loop-change branch in ``get_client``). The only caller,
|
|
1310
|
+
# ``__main__``'s shutdown, runs on the pool's own loop, so each
|
|
1311
|
+
# ``disconnect()`` is awaited to completion here. ``RuntimeError``
|
|
1312
|
+
# is caught purely defensively: were this ever driven from a
|
|
1313
|
+
# different loop, the cross-loop future would raise instead of
|
|
1314
|
+
# hanging the shutdown. Unlike ``get_client`` it does not
|
|
1315
|
+
# reschedule onto the owning loop, because the process is going
|
|
1316
|
+
# away and there is nothing left to resume it.
|
|
1317
|
+
clients = list(self._clients.values())
|
|
1318
|
+
self._clients.clear()
|
|
1319
|
+
self._last_used.clear()
|
|
1320
|
+
self._current_loop = None
|
|
1321
|
+
for client in clients:
|
|
1243
1322
|
try:
|
|
1244
1323
|
await client.disconnect()
|
|
1245
|
-
except (OSError, asyncio.CancelledError):
|
|
1324
|
+
except (OSError, RuntimeError, asyncio.CancelledError):
|
|
1246
1325
|
logger.warning(
|
|
1247
1326
|
"Error disconnecting WebSocket client", exc_info=True
|
|
1248
1327
|
)
|
|
1249
|
-
self._clients.clear()
|
|
1250
|
-
self._last_used.clear()
|
|
1251
|
-
self._current_loop = None
|
|
1252
1328
|
|
|
1253
1329
|
|
|
1254
1330
|
# Global WebSocket manager instance
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "home-assistant-skills",
|
|
3
3
|
"description": "Agent skills for Home Assistant: best practices for automations, helpers, templates, device control, and dashboards.",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.15.0",
|
|
5
5
|
"repository": "https://github.com/homeassistant-ai/skills",
|
|
6
6
|
"license": "MIT"
|
|
7
7
|
}
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/resources/skills-vendor/README.md
RENAMED
|
@@ -38,11 +38,23 @@ Run `/reload-plugins` or restart Claude Code for the skill to take effect.
|
|
|
38
38
|
|
|
39
39
|
### Claude Desktop / claude.ai
|
|
40
40
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
41
|
+
Both apps share the same Customize UI, reached via the left sidebar (Claude Desktop) or [claude.ai/customize](https://claude.ai/customize) (browser).
|
|
42
|
+
|
|
43
|
+
1. Enable code execution: Settings → Capabilities → turn on **Cloud code execution and file creation** (required for skills)
|
|
44
|
+
2. Customize → Plugins → Add → Add marketplace → Add from a repository
|
|
45
|
+
3. Enter `homeassistant-ai/skills` (or the full URL, `https://github.com/homeassistant-ai/skills`) → Sync
|
|
46
|
+
|
|
47
|
+
This installs the skill as a plugin synced from this repo — no download or zip needed. To update later, go to Plugins, click the `skills` marketplace tag, open its `⋯` menu, and choose **Check for updates** (or toggle **Sync automatically**).
|
|
48
|
+
|
|
49
|
+
<details>
|
|
50
|
+
<summary>Alternative: upload the skill manually as a zip</summary>
|
|
51
|
+
|
|
52
|
+
1. Enable code execution: Settings → Capabilities → turn on **Cloud code execution and file creation**
|
|
53
|
+
2. Download or clone this repository
|
|
54
|
+
3. Zip the skill folder: `cd skills && zip -r home-assistant-best-practices.zip home-assistant-best-practices/`
|
|
55
|
+
4. Customize → Skills → Add → Upload a skill
|
|
56
|
+
|
|
57
|
+
</details>
|
|
46
58
|
|
|
47
59
|
## Skill Contents
|
|
48
60
|
|
|
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-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/client/supervisor_client.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/client/websocket_listener.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/dashboard_screenshot/__init__.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/dashboard_screenshot/capture.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/dashboard_screenshot/content.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/dashboard_screenshot/paths.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/dashboard_screenshot/provision.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
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/resources/skills-vendor/AGENTS.md
RENAMED
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/resources/skills-vendor/CLAUDE.md
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/resources/skills-vendor/LICENSE
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
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/settings_ui/_handlers_advanced.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/settings_ui/_handlers_backups.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/settings_ui/_handlers_fs.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/settings_ui/_handlers_server.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/settings_ui/_handlers_theme.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/settings_ui/_handlers_tools.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/settings_ui/_persistence.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/settings_ui/_supervisor.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/settings_ui/_tools_meta.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/settings_ui/locales/README.md
RENAMED
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/settings_ui/locales/de.json
RENAMED
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/settings_ui/locales/en.json
RENAMED
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/settings_ui/locales/ru.json
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/settings_ui/settings.html
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/stdio_settings_sidecar.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/best_practice_checker.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/component_config_reads.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/component_devices.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/component_registries.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/config_entry_flow.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-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/reference_validator.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/smart_search/__init__.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/smart_search/_base.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/smart_search/_config.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/smart_search/_deep.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/smart_search/_entities.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/smart_search/_fetch.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/smart_search/_overview.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/smart_search/_scenes.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/smart_search/_scoring.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_blueprints.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_bug_report.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_categories.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_config_automations.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_config_dashboards.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_config_helpers.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_config_scenes.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_config_scripts.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_filesystem.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_integrations.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
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_voice_assistant.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/tools_yaml_config.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/tools/validation_middleware.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/transforms/categorized_search.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/transforms/lite_docstrings.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
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/utils/kill_signal_diagnostics.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/utils/operation_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp/visibility/persistence.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp_dev.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp_dev.egg-info/entry_points.txt
RENAMED
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp_dev.egg-info/requires.txt
RENAMED
|
File without changes
|
{ha_mcp_dev-7.14.1.dev2072 → ha_mcp_dev-7.14.2.dev2081}/src/ha_mcp_dev.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|