ha-mcp-dev 8.0.0.dev2233__tar.gz → 8.0.0.dev2235__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.0.0.dev2233/src/ha_mcp_dev.egg-info → ha_mcp_dev-8.0.0.dev2235}/PKG-INFO +1 -1
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/pyproject.toml +1 -1
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/__main__.py +36 -1
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/settings_ui/__init__.py +9 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/tools_code.py +14 -2
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/transport_security.py +6 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235/src/ha_mcp_dev.egg-info}/PKG-INFO +1 -1
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/LICENSE +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/MANIFEST.in +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/README.md +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/setup.cfg +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/__init__.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/_pypi_marker +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/_version.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/auth/__init__.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/auth/consent_form.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/auth/provider.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/backup_manager.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/browser_landing.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/client/__init__.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/client/rest_client.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/client/supervisor_client.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/client/websocket_client.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/client/websocket_listener.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/config.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/errors.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/llm_exposure.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/policy/__init__.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/policy/approval_queue.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/policy/evaluator.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/policy/handlers.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/policy/middleware.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/policy/model.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/policy/persistence.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/policy/value_sources.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/py.typed +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/read_only.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/resources/skills-vendor/.github/pull_request_template.md +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/evals/evals.json +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/server.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/settings_ui/_i18n.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/settings_ui/_persistence.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/settings_ui/_theme.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/settings_ui/locales/README.md +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/settings_ui/locales/de.json +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/settings_ui/locales/en.json +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/settings_ui/locales/es.json +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/settings_ui/locales/it.json +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/settings_ui/settings.css +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/settings_ui/settings.html +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/settings_ui/settings.js +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/smoke_test.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/strict_bps.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/__init__.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/auto_backup.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/backup.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/best_practice_checker.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/best_practice_result.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/best_practice_variables.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/component_api.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/component_config_reads.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/component_devices.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/component_registries.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/config_entry_flow.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/device_control.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/hacs_registration.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/helpers.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/radio/__init__.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/radio/base.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/radio/matter.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/radio/thread.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/radio/zigbee.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/radio/zwave.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/reference_validator.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/registry.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/smart_search/_base.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/smart_search/_config.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/tools_addons.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/tools_areas.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/tools_blueprints.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/tools_bug_report.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/tools_calendar.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/tools_camera.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/tools_categories.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/tools_config_automations.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/tools_dev.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/tools_energy.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/tools_entities.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/tools_filesystem.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/tools_groups.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/tools_hacs.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/tools_history.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/tools_integrations.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/tools_labels.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/tools_radio.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/tools_registry.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/tools_resources.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/tools_search.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/tools_service.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/tools_services.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/tools_system.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/tools_themes.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/tools_todo.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/tools_traces.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/tools_updates.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/tools_utility.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/tools_zones.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/util_helpers.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/validation_middleware.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/transforms/__init__.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/transforms/categorized_search.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/update_check.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/utils/__init__.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/utils/config_hash.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/utils/config_write_lock.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/utils/data_paths.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/utils/domain_handlers.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/utils/fuzzy_search.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/utils/operation_manager.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/utils/python_sandbox.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/utils/skill_loader.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/utils/usage_logger.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/visibility/__init__.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/visibility/enforcement.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/visibility/model.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/visibility/persistence.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/visibility/resolver.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp_dev.egg-info/SOURCES.txt +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/tests/__init__.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/tests/test_constants.py +0 -0
- {ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/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.0.0.
|
|
7
|
+
version = "8.0.0.dev2235"
|
|
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
|
|
@@ -609,6 +609,25 @@ async def _cleanup_resources() -> None:
|
|
|
609
609
|
logger.info("Server resources cleaned up")
|
|
610
610
|
|
|
611
611
|
|
|
612
|
+
def _log_cleanup_result(task: "asyncio.Future[None]") -> None:
|
|
613
|
+
"""Consume the cleanup task's outcome so a failure is never silent.
|
|
614
|
+
|
|
615
|
+
``asyncio.wait`` does not retrieve results, and the timeout path
|
|
616
|
+
deliberately abandons rather than awaits (see the ``finally`` block), so
|
|
617
|
+
without this nothing observes ``cleanup_task``. An exception left
|
|
618
|
+
unretrieved this close to loop teardown surfaces only as a GC-time "Task
|
|
619
|
+
exception was never retrieved" error, which is unstructured and not
|
|
620
|
+
guaranteed to be emitted before exit. Mirrors what ``_cancel_tasks`` does
|
|
621
|
+
for the tasks it reaps. Cancellation is the expected abandoned-timeout
|
|
622
|
+
outcome and stays silent.
|
|
623
|
+
"""
|
|
624
|
+
if task.cancelled():
|
|
625
|
+
return
|
|
626
|
+
exc = task.exception()
|
|
627
|
+
if exc is not None:
|
|
628
|
+
logger.warning(f"Resource cleanup raised: {exc!r}")
|
|
629
|
+
|
|
630
|
+
|
|
612
631
|
async def _cancel_tasks(*tasks: asyncio.Task) -> None:
|
|
613
632
|
"""Cancel tasks and wait for completion, bounding the wait.
|
|
614
633
|
|
|
@@ -697,6 +716,7 @@ async def _run_with_shutdown(server_coro: Coroutine[Any, Any, Any]) -> None:
|
|
|
697
716
|
# guard), so a hung close handshake could block shutdown past the
|
|
698
717
|
# budget. A straggler is left to the runner's own task sweep.
|
|
699
718
|
cleanup_task = asyncio.ensure_future(_cleanup_resources())
|
|
719
|
+
cleanup_task.add_done_callback(_log_cleanup_result)
|
|
700
720
|
_done, cleanup_pending = await asyncio.wait(
|
|
701
721
|
{cleanup_task}, timeout=SHUTDOWN_TIMEOUT_SECONDS
|
|
702
722
|
)
|
|
@@ -1004,6 +1024,19 @@ def _get_http_runtime(default_port: int = 8086) -> tuple[str, int, str]:
|
|
|
1004
1024
|
``run_async``, any ``FASTMCP_HOST`` value in the environment is
|
|
1005
1025
|
ignored — ``MCP_HOST`` is the only env var that affects bind host
|
|
1006
1026
|
for ha-mcp's CLI entry points.
|
|
1027
|
+
|
|
1028
|
+
The ``0.0.0.0`` default is deliberate and documented: SECURITY.md
|
|
1029
|
+
§ "Local network is the trusted zone for standard mode" states that the
|
|
1030
|
+
HTTP entrypoints bind to all interfaces so LAN peers can reach them, and
|
|
1031
|
+
its Scope section excludes "LAN-peer access to standard-mode HTTP
|
|
1032
|
+
endpoints".
|
|
1033
|
+
|
|
1034
|
+
The default ``/mcp`` path is *not* blessed the same way once the bind
|
|
1035
|
+
leaves loopback. That combination is what ``_warn_if_default_path_exposed``
|
|
1036
|
+
warns about, and SECURITY.md's Scope classes it under "a misconfigured
|
|
1037
|
+
deployment" — meaning such reports are declined, not that the
|
|
1038
|
+
configuration is endorsed. Operators on a non-loopback bind are still
|
|
1039
|
+
expected to set a high-entropy ``MCP_SECRET_PATH``.
|
|
1007
1040
|
"""
|
|
1008
1041
|
|
|
1009
1042
|
host = os.getenv("MCP_HOST", "0.0.0.0")
|
|
@@ -1020,7 +1053,9 @@ def _get_http_runtime(default_port: int = 8086) -> tuple[str, int, str]:
|
|
|
1020
1053
|
# Default ``MCP_SECRET_PATH`` value, shared by ``_get_http_runtime`` (the
|
|
1021
1054
|
# read-from-env fallback) and ``_warn_if_default_path_exposed`` (the
|
|
1022
1055
|
# hardening-nudge predicate). Single source of truth so the two sites
|
|
1023
|
-
# can't drift.
|
|
1056
|
+
# can't drift. Safe on a loopback bind; on a non-loopback bind it is the
|
|
1057
|
+
# misconfiguration ``_warn_if_default_path_exposed`` flags, which SECURITY.md
|
|
1058
|
+
# declines to action without endorsing — see ``_get_http_runtime`` above.
|
|
1024
1059
|
DEFAULT_MCP_PATH = "/mcp"
|
|
1025
1060
|
|
|
1026
1061
|
# Hostname literals (not IP addresses) treated as loopback by
|
|
@@ -566,6 +566,15 @@ def register_settings_routes(
|
|
|
566
566
|
and serve the "Open Web UI" button. Stdio transports use a separate
|
|
567
567
|
side-process sidecar instead — see :mod:`ha_mcp.stdio_settings_sidecar`.
|
|
568
568
|
|
|
569
|
+
The ``RequireAuthMiddleware`` bypass is the documented posture, not an
|
|
570
|
+
oversight: SECURITY.md § "OAuth Mode — Beta Warning" states that the
|
|
571
|
+
settings UI "is **not** gated by the OAuth token", and its Scope section
|
|
572
|
+
excludes "The web settings UI not being gated by the OAuth/OIDC token".
|
|
573
|
+
OAuth and OIDC modes compensate by passing a *dedicated* secret path here
|
|
574
|
+
rather than the client-known MCP path (GHSA-mx64-982r-65vg); standard mode
|
|
575
|
+
and the add-on pass the MCP secret path, which already gates the whole
|
|
576
|
+
tool surface.
|
|
577
|
+
|
|
569
578
|
Args:
|
|
570
579
|
mcp: The FastMCP instance to register routes on.
|
|
571
580
|
server: The HomeAssistantSmartMCPServer wrapping ``mcp``.
|
|
@@ -53,8 +53,20 @@ logger = logging.getLogger(__name__)
|
|
|
53
53
|
# boundary.
|
|
54
54
|
#
|
|
55
55
|
# WARNING: This is shared across all clients in the same server process.
|
|
56
|
-
#
|
|
57
|
-
#
|
|
56
|
+
# One client's saved tools are listable and runnable by every other client,
|
|
57
|
+
# and ``save_as`` overwrites by name without an ownership check. OAuth is the
|
|
58
|
+
# only mode with distinct per-user credentials for that to cross; standard,
|
|
59
|
+
# OIDC and add-on modes are single-tenant already (SECURITY.md § "Standard
|
|
60
|
+
# mode is single-tenant"), so every caller there shares one HA token anyway.
|
|
61
|
+
#
|
|
62
|
+
# That exposure is accepted design, not a pending TODO — SECURITY.md § Scope
|
|
63
|
+
# excludes "Saved custom tools (code mode, off by default) visible to other
|
|
64
|
+
# clients of the same server process", on the grounds that they are shared
|
|
65
|
+
# scaffolding rather than per-user data, that ``run_saved`` executes with the
|
|
66
|
+
# caller's own HA token (granting no access the caller lacks), and that any
|
|
67
|
+
# client which can reach ha-mcp is a trusted principal (SECURITY.md § "MCP
|
|
68
|
+
# clients are trusted principals"). Scoping per session/user would be a
|
|
69
|
+
# feature, not a security fix.
|
|
58
70
|
_saved_tools: dict[str, dict[str, str]] = {}
|
|
59
71
|
|
|
60
72
|
# Tools that sandbox code must not call. Includes ``ha_manage_custom_tool``
|
|
@@ -23,6 +23,12 @@ exactly the pre-3.4.3 behaviour without giving up the protection that matters.
|
|
|
23
23
|
Operators who front ha-mcp differently can re-enable the guard (and pin their
|
|
24
24
|
own allow-lists) via ``FASTMCP_HTTP_HOST_ORIGIN_PROTECTION=true`` plus
|
|
25
25
|
``FASTMCP_HTTP_ALLOWED_HOSTS`` / ``FASTMCP_HTTP_ALLOWED_ORIGINS``.
|
|
26
|
+
|
|
27
|
+
Turning the guard off is the documented posture, not an oversight: it has its
|
|
28
|
+
own SECURITY.md section, § "Host/Origin validation (DNS-rebinding guard) is off
|
|
29
|
+
by default", and the Scope section there excludes "DNS rebinding against the
|
|
30
|
+
HTTP entrypoints" on the grounds that URL-path secrecy is the boundary and the
|
|
31
|
+
local network is already the trusted zone.
|
|
26
32
|
"""
|
|
27
33
|
|
|
28
34
|
from __future__ import annotations
|
|
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.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/client/supervisor_client.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/client/websocket_listener.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/dashboard_screenshot/__init__.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/dashboard_screenshot/capture.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/dashboard_screenshot/content.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/dashboard_screenshot/paths.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/dashboard_screenshot/provision.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/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
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/resources/skills-vendor/AGENTS.md
RENAMED
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/resources/skills-vendor/CLAUDE.md
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/resources/skills-vendor/LICENSE
RENAMED
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/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.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/settings_ui/_handlers_advanced.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/settings_ui/_handlers_backups.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/settings_ui/_handlers_fs.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/settings_ui/_handlers_server.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/settings_ui/_handlers_theme.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/settings_ui/_handlers_tools.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/settings_ui/_persistence.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/settings_ui/locales/README.md
RENAMED
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/settings_ui/locales/de.json
RENAMED
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/settings_ui/locales/en.json
RENAMED
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/settings_ui/locales/es.json
RENAMED
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/settings_ui/locales/fr.json
RENAMED
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/settings_ui/locales/it.json
RENAMED
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/settings_ui/locales/ru.json
RENAMED
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/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.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/best_practice_checker.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/best_practice_result.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/best_practice_variables.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/component_config_reads.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/component_registries.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/component_registry_lookup.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/config_entry_flow_form.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/config_entry_flow_menu.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/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.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/reference_validator.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/smart_search/__init__.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/smart_search/_base.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/smart_search/_config.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/smart_search/_deep.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/smart_search/_entities.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/smart_search/_fetch.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/smart_search/_overview.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/smart_search/_scenes.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/smart_search/_scoring.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.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/tools_config_automations.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/tools_config_dashboards.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/tools_config_helpers.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/tools_config_scenes.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/tools_config_scripts.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/tools_dashboard_screenshot.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-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/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-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/tools_voice_assistant.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/tools/validation_middleware.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/transforms/categorized_search.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/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-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp/utils/kill_signal_diagnostics.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
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp_dev.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{ha_mcp_dev-8.0.0.dev2233 → ha_mcp_dev-8.0.0.dev2235}/src/ha_mcp_dev.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|