ha-mcp-dev 7.14.2.dev2188__tar.gz → 7.14.2.dev2193__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.2.dev2188/src/ha_mcp_dev.egg-info → ha_mcp_dev-7.14.2.dev2193}/PKG-INFO +1 -1
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/pyproject.toml +1 -1
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/client/websocket_listener.py +0 -2
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/settings_ui/locales/README.md +33 -40
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/settings_ui/locales/de.json +250 -229
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/settings_ui/locales/en.json +24 -3
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/settings_ui/locales/es.json +250 -229
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/settings_ui/locales/fr.json +250 -229
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/settings_ui/locales/it.json +250 -229
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/settings_ui/locales/ru.json +372 -90
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/settings_ui/locales/zh-Hans.json +249 -228
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/settings_ui/settings.js +22 -23
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/device_control.py +99 -32
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/tools_service.py +6 -4
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/util_helpers.py +2 -31
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/utils/domain_handlers.py +36 -17
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/utils/operation_manager.py +20 -12
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193/src/ha_mcp_dev.egg-info}/PKG-INFO +1 -1
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/LICENSE +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/MANIFEST.in +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/README.md +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/setup.cfg +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/__init__.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/__main__.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/_pypi_marker +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/_version.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/auth/__init__.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/auth/consent_form.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/auth/provider.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/backup_manager.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/browser_landing.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/client/__init__.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/client/rest_client.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/client/supervisor_client.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/client/websocket_client.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/config.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/errors.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/llm_exposure.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/policy/__init__.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/policy/approval_queue.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/policy/evaluator.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/policy/handlers.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/policy/middleware.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/policy/model.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/policy/persistence.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/policy/value_sources.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/py.typed +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/read_only.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/resources/skills-vendor/.github/pull_request_template.md +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/evals/evals.json +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/server.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/settings_ui/__init__.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/settings_ui/_i18n.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/settings_ui/_persistence.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/settings_ui/_theme.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/settings_ui/settings.css +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/settings_ui/settings.html +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/smoke_test.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/strict_bps.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/__init__.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/auto_backup.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/backup.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/best_practice_checker.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/component_api.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/component_config_reads.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/component_devices.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/component_registries.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/config_entry_flow.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/helpers.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/radio/__init__.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/radio/base.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/radio/matter.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/radio/thread.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/radio/zigbee.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/radio/zwave.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/reference_validator.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/registry.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/smart_search/_base.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/smart_search/_config.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/tools_addons.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/tools_areas.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/tools_blueprints.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/tools_bug_report.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/tools_calendar.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/tools_camera.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/tools_categories.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/tools_code.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/tools_config_automations.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/tools_dev.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/tools_energy.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/tools_entities.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/tools_filesystem.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/tools_groups.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/tools_hacs.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/tools_history.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/tools_integrations.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/tools_labels.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/tools_radio.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/tools_registry.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/tools_resources.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/tools_search.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/tools_services.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/tools_system.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/tools_themes.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/tools_todo.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/tools_traces.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/tools_updates.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/tools_utility.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/tools_zones.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/tools/validation_middleware.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/transforms/__init__.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/transforms/categorized_search.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/transport_security.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/update_check.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/utils/__init__.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/utils/config_hash.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/utils/config_write_lock.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/utils/data_paths.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/utils/fuzzy_search.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/utils/python_sandbox.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/utils/skill_loader.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/utils/usage_logger.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/visibility/__init__.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/visibility/enforcement.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/visibility/model.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/visibility/persistence.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/visibility/resolver.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp_dev.egg-info/SOURCES.txt +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/tests/__init__.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/tests/test_constants.py +0 -0
- {ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/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.2.
|
|
7
|
+
version = "7.14.2.dev2193"
|
|
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.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/client/websocket_listener.py
RENAMED
|
@@ -9,7 +9,6 @@ import asyncio
|
|
|
9
9
|
import logging
|
|
10
10
|
from typing import Any
|
|
11
11
|
|
|
12
|
-
from ..config import get_global_settings
|
|
13
12
|
from ..utils.operation_manager import get_operation_manager, update_pending_operations
|
|
14
13
|
from .websocket_client import HomeAssistantWebSocketClient, get_websocket_client
|
|
15
14
|
|
|
@@ -21,7 +20,6 @@ class WebSocketListenerService:
|
|
|
21
20
|
|
|
22
21
|
def __init__(self) -> None:
|
|
23
22
|
"""Initialize the WebSocket listener service."""
|
|
24
|
-
self.settings = get_global_settings()
|
|
25
23
|
self.operation_manager = get_operation_manager()
|
|
26
24
|
self.websocket_client: HomeAssistantWebSocketClient | None = None
|
|
27
25
|
self.listener_task: asyncio.Task | None = None
|
{ha_mcp_dev-7.14.2.dev2188 → ha_mcp_dev-7.14.2.dev2193}/src/ha_mcp/settings_ui/locales/README.md
RENAMED
|
@@ -4,42 +4,35 @@ The settings page discovers every `*.json` catalog in this directory. No Python
|
|
|
4
4
|
or JavaScript registration is required, and no packaging file needs editing —
|
|
5
5
|
the wheel, sdist and binary declarations all match this directory by pattern.
|
|
6
6
|
|
|
7
|
+
**This directory is the canonical translation store.** Besides the settings
|
|
8
|
+
UI's own strings, each catalog carries the add-on option strings under
|
|
9
|
+
`addon.<key>.*` (with `features.<key>.*` for options the settings UI also
|
|
10
|
+
shows, and `addon_stable.<key>.*` for flavor-specific wording). Both add-on
|
|
11
|
+
flavors' `translations/*.yaml` and the `FEATURE_META` block in `settings.js`
|
|
12
|
+
are generated from these catalogs by `scripts/generate_locales.py` — never
|
|
13
|
+
edit those by hand. Wherever one English string reaches the reader from more
|
|
14
|
+
than one surface, the translation is stored once here and projected, so
|
|
15
|
+
cross-surface wording cannot drift.
|
|
16
|
+
|
|
7
17
|
## Adding a language
|
|
8
18
|
|
|
9
19
|
A language ships on **all four** translated surfaces or not at all, and one
|
|
10
20
|
Home Assistant language code names every file:
|
|
11
21
|
|
|
12
|
-
- `src/ha_mcp/settings_ui/locales/<code>.json` (this directory)
|
|
13
|
-
- `custom_components/ha_mcp_tools/translations/<code>.json`
|
|
14
|
-
- `homeassistant-addon/translations/<code>.yaml`
|
|
15
|
-
- `homeassistant-addon-dev/translations/<code>.yaml`
|
|
22
|
+
- `src/ha_mcp/settings_ui/locales/<code>.json` (this directory; authored)
|
|
23
|
+
- `custom_components/ha_mcp_tools/translations/<code>.json` (authored)
|
|
24
|
+
- `homeassistant-addon/translations/<code>.yaml` (generated)
|
|
25
|
+
- `homeassistant-addon-dev/translations/<code>.yaml` (generated)
|
|
16
26
|
|
|
17
|
-
|
|
27
|
+
Add the two authored catalogs — this one may start as a `meta`-only stub
|
|
28
|
+
(`native_name`, `dir`) — then run `python scripts/generate_locales.py` and let
|
|
29
|
+
`scripts/translate_locales.py` (or the `locale-sync.yml` workflow on the PR)
|
|
30
|
+
machine-fill every string; review its output like any other diff. Also
|
|
18
31
|
add the new code to the locale list in the repository-root `AGENTS.md`
|
|
19
32
|
§ Translations — that list is pinned by
|
|
20
|
-
`test_agents_md_lists_every_shipped_locale`.
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
carry content rules of their own: the component catalog needs every `en.json`
|
|
24
|
-
key with identical `{placeholders}` and no extra ones, and each add-on YAML
|
|
25
|
-
needs a `name` and a `description` for every `schema:` key of *that* flavor's
|
|
26
|
-
`config.yaml`, with nothing left behind for a key the schema no longer
|
|
27
|
-
declares. The two flavors declare different schemas, so neither YAML is a copy
|
|
28
|
-
of the other. The repository-root `AGENTS.md` § Translations states all of
|
|
29
|
-
this; a contributor who writes only this catalog goes red on the other three.
|
|
30
|
-
|
|
31
|
-
**Start from a translated catalog, not from `en.json`.** English for the tool
|
|
32
|
-
titles and descriptions comes from the tool definitions at runtime, so `en.json`
|
|
33
|
-
ships `tools` and `tool_groups` empty; a copy of it is missing both sections
|
|
34
|
-
that this catalog is required to carry.
|
|
35
|
-
|
|
36
|
-
**Read the other surfaces before you word a switch.** Wherever the same English
|
|
37
|
-
text is shipped from more than one catalog, your wording has to be byte-identical
|
|
38
|
-
in all of them. That is not only the add-on-options-versus-settings-UI axis: the
|
|
39
|
-
two add-on flavors describe most of the same options, so a good part of the
|
|
40
|
-
pinned parity is stable-against-dev, with no settings-UI text involved at all.
|
|
41
|
-
Translating one surface at a time is exactly how one option ends up with two
|
|
42
|
-
different sentences.
|
|
33
|
+
`test_agents_md_lists_every_shipped_locale`. The engine reads the target
|
|
34
|
+
language from `meta.native_name`, so any language an LLM can write — natural
|
|
35
|
+
or constructed — needs no pipeline change.
|
|
43
36
|
|
|
44
37
|
## Catalog sections
|
|
45
38
|
|
|
@@ -80,17 +73,17 @@ import, so the failure names the file but arrives as a broken test module:
|
|
|
80
73
|
- `tool_groups` and `tools` name exactly the renderable groups and tools — a
|
|
81
74
|
tool added to the codebase turns every locale red in the PR that adds it.
|
|
82
75
|
- At most 5% of this catalog's `messages`, and 5% of its `tools` texts, may be
|
|
83
|
-
byte-identical to English or missing outright
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
has no such member, so there pick one wording and use it in both.
|
|
76
|
+
byte-identical to English or missing outright; the component catalogs allow
|
|
77
|
+
15%, because they carry product names as keys of their own. A single tool
|
|
78
|
+
whose `title` *and* `description` are both still English fails by name
|
|
79
|
+
however small the share.
|
|
80
|
+
- The generated files (both add-on YAMLs, `FEATURE_META`) are byte-exact
|
|
81
|
+
generator output (`test_derived_catalogs_match_the_canonical_store`); run
|
|
82
|
+
`python scripts/generate_locales.py` after touching any `addon.*`,
|
|
83
|
+
`addon_stable.*` or `features.*` key.
|
|
92
84
|
- The English each translation was written against is hashed in
|
|
93
85
|
`tests/src/unit/locale_source_baseline.json`, so a later edit to an English
|
|
94
|
-
string turns the locales red rather than leaving them silently stale
|
|
95
|
-
|
|
96
|
-
|
|
86
|
+
string turns the locales red rather than leaving them silently stale —
|
|
87
|
+
`scripts/translate_locales.py` retranslates exactly those keys and repins
|
|
88
|
+
the baseline. Adding a language does not change any English source, so no
|
|
89
|
+
baseline regeneration is needed for it.
|