ha-mcp-dev 7.14.2.dev2169__tar.gz → 7.14.2.dev2173__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.dev2169/src/ha_mcp_dev.egg-info → ha_mcp_dev-7.14.2.dev2173}/PKG-INFO +1 -1
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/pyproject.toml +1 -1
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/settings_ui/__init__.py +18 -13
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/settings_ui/locales/de.json +2 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/settings_ui/locales/en.json +2 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/settings_ui/locales/es.json +2 -2
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/settings_ui/locales/fr.json +2 -0
- ha_mcp_dev-7.14.2.dev2173/src/ha_mcp/settings_ui/locales/it.json +808 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/settings_ui/locales/ru.json +2 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/settings_ui/locales/zh-Hans.json +9 -7
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/settings_ui/settings.js +44 -5
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173/src/ha_mcp_dev.egg-info}/PKG-INFO +1 -1
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp_dev.egg-info/SOURCES.txt +1 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/LICENSE +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/MANIFEST.in +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/README.md +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/setup.cfg +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/__init__.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/__main__.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/_pypi_marker +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/_version.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/auth/__init__.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/auth/consent_form.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/auth/provider.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/backup_manager.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/browser_landing.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/client/__init__.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/client/rest_client.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/client/supervisor_client.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/client/websocket_client.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/client/websocket_listener.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/config.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/errors.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/llm_exposure.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/policy/__init__.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/policy/approval_queue.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/policy/evaluator.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/policy/handlers.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/policy/middleware.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/policy/model.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/policy/persistence.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/policy/value_sources.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/py.typed +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/read_only.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/resources/skills-vendor/.github/pull_request_template.md +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/evals/evals.json +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/server.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/settings_ui/_i18n.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/settings_ui/_persistence.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/settings_ui/_theme.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/settings_ui/locales/README.md +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/settings_ui/settings.css +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/settings_ui/settings.html +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/smoke_test.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/strict_bps.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/__init__.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/auto_backup.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/backup.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/best_practice_checker.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/component_api.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/component_config_reads.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/component_devices.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/component_registries.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/config_entry_flow.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/device_control.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/helpers.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/radio/__init__.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/radio/base.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/radio/matter.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/radio/thread.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/radio/zigbee.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/radio/zwave.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/reference_validator.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/registry.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/smart_search/_base.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/smart_search/_config.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/tools_addons.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/tools_areas.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/tools_blueprints.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/tools_bug_report.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/tools_calendar.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/tools_camera.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/tools_categories.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/tools_code.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/tools_config_automations.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/tools_dev.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/tools_energy.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/tools_entities.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/tools_filesystem.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/tools_groups.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/tools_hacs.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/tools_history.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/tools_integrations.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/tools_labels.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/tools_radio.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/tools_registry.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/tools_resources.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/tools_search.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/tools_service.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/tools_services.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/tools_system.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/tools_themes.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/tools_todo.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/tools_traces.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/tools_updates.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/tools_utility.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/tools_zones.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/util_helpers.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/tools/validation_middleware.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/transforms/__init__.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/transforms/categorized_search.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/transport_security.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/update_check.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/utils/__init__.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/utils/config_hash.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/utils/config_write_lock.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/utils/data_paths.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/utils/domain_handlers.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/utils/fuzzy_search.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/utils/operation_manager.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/utils/python_sandbox.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/utils/skill_loader.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/utils/usage_logger.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/visibility/__init__.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/visibility/enforcement.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/visibility/model.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/visibility/persistence.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/visibility/resolver.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/tests/__init__.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/tests/test_constants.py +0 -0
- {ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/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.dev2173"
|
|
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
|
|
@@ -188,6 +188,23 @@ _SETTINGS_HTML = _settings_html_template.replace(
|
|
|
188
188
|
).replace("__HA_MCP_JS__", _SETTINGS_JS)
|
|
189
189
|
|
|
190
190
|
|
|
191
|
+
# Body of the 503 the five live-approval routes — pending, approve, deny,
|
|
192
|
+
# tool-schema and value-source — answer with whenever these stub handlers are
|
|
193
|
+
# in use: the stdio sidecar, but equally a main server with no approval queue
|
|
194
|
+
# (feature off, or the policy package failed to import). Config GET/PUT are
|
|
195
|
+
# served for real even then. Module-level so the guard on the settings-UI copy
|
|
196
|
+
# pins the string the server actually sends, rather than a hand-copied
|
|
197
|
+
# paraphrase that drifts away from it.
|
|
198
|
+
POLICY_UNAVAILABLE_MESSAGE = (
|
|
199
|
+
"Tool security policies live approvals are not active. "
|
|
200
|
+
"Either the feature is turned off in App (add-on) config, the "
|
|
201
|
+
"settings UI is running in stdio-sidecar mode, or the "
|
|
202
|
+
"policy package failed to import at startup. Check the "
|
|
203
|
+
"App (add-on) log for ImportError / RuntimeError details if you "
|
|
204
|
+
"expected gating to be on."
|
|
205
|
+
)
|
|
206
|
+
|
|
207
|
+
|
|
191
208
|
def _build_stub_policy_handlers(*, data_dir: Path) -> dict[str, Any]:
|
|
192
209
|
"""Sidecar variant of the tool security policies handlers.
|
|
193
210
|
|
|
@@ -243,19 +260,7 @@ def _build_stub_policy_handlers(*, data_dir: Path) -> dict[str, Any]:
|
|
|
243
260
|
# Either way, point users at the addon log for the real reason
|
|
244
261
|
# (a startup ImportError on the policy package surfaces here as
|
|
245
262
|
# the same 503 with a "ModuleNotFoundError" in the log).
|
|
246
|
-
return JSONResponse(
|
|
247
|
-
{
|
|
248
|
-
"error": (
|
|
249
|
-
"Tool security policies live approvals are not active. "
|
|
250
|
-
"Either the feature is turned off in App (add-on) config, the "
|
|
251
|
-
"settings UI is running in stdio-sidecar mode, or the "
|
|
252
|
-
"policy package failed to import at startup. Check the "
|
|
253
|
-
"App (add-on) log for ImportError / RuntimeError details if you "
|
|
254
|
-
"expected gating to be on."
|
|
255
|
-
)
|
|
256
|
-
},
|
|
257
|
-
status_code=503,
|
|
258
|
-
)
|
|
263
|
+
return JSONResponse({"error": POLICY_UNAVAILABLE_MESSAGE}, status_code=503)
|
|
259
264
|
|
|
260
265
|
return {
|
|
261
266
|
"policy_get_config": get_config,
|
{ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/settings_ui/locales/de.json
RENAMED
|
@@ -353,6 +353,8 @@
|
|
|
353
353
|
"policies.pending.unavailable": "Live-Genehmigungen nicht verfügbar. Überprüfe das Add-on-Protokoll.",
|
|
354
354
|
"policies.pending.expires": "Läuft ab: {time}",
|
|
355
355
|
"policies.pending.already_decided": "Diese Genehmigung war bereits {decision}, möglicherweise von einem anderen Tab oder einer anderen Sitzung.",
|
|
356
|
+
"policies.pending.decision.approved": "genehmigt",
|
|
357
|
+
"policies.pending.decision.denied": "abgelehnt",
|
|
356
358
|
"policies.pending.invalid_token": "Dieses Genehmigungs-Token ist nicht mehr gültig (bereits verbraucht oder abgelaufen).",
|
|
357
359
|
"policies.pending.action_failed": "Genehmigungs-Aktion fehlgeschlagen: {detail}",
|
|
358
360
|
"visibility.errors.reach_server": "Server konnte nicht erreicht werden: {message}",
|
{ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/settings_ui/locales/en.json
RENAMED
|
@@ -353,6 +353,8 @@
|
|
|
353
353
|
"policies.pending.unavailable": "Live approvals unavailable. Check the App (add-on) log.",
|
|
354
354
|
"policies.pending.expires": "Expires: {time}",
|
|
355
355
|
"policies.pending.already_decided": "This approval was already {decision}, possibly by another tab or session.",
|
|
356
|
+
"policies.pending.decision.approved": "approved",
|
|
357
|
+
"policies.pending.decision.denied": "denied",
|
|
356
358
|
"policies.pending.invalid_token": "This approval token is no longer valid (already consumed or expired).",
|
|
357
359
|
"policies.pending.action_failed": "Approval action failed: {detail}",
|
|
358
360
|
"visibility.errors.reach_server": "Could not reach the server: {message}",
|
{ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/settings_ui/locales/es.json
RENAMED
|
@@ -353,6 +353,8 @@
|
|
|
353
353
|
"policies.pending.unavailable": "Las aprobaciones en vivo no están disponibles. Revisa el registro de la app (complemento).",
|
|
354
354
|
"policies.pending.expires": "Caduca: {time}",
|
|
355
355
|
"policies.pending.already_decided": "Esta aprobación ya estaba {decision}, posiblemente desde otra pestaña o sesión.",
|
|
356
|
+
"policies.pending.decision.approved": "aprobada",
|
|
357
|
+
"policies.pending.decision.denied": "denegada",
|
|
356
358
|
"policies.pending.invalid_token": "Este token de aprobación ya no es válido (ya se ha consumido o ha caducado).",
|
|
357
359
|
"policies.pending.action_failed": "Ha fallado la acción de aprobación: {detail}",
|
|
358
360
|
"visibility.errors.reach_server": "No se ha podido contactar con el servidor: {message}",
|
|
@@ -371,8 +373,6 @@
|
|
|
371
373
|
"advanced.verify_ssl.help": "Desactiva la verificación TLS solo en redes de confianza. Hay que reiniciar.",
|
|
372
374
|
"advanced.fuzzy_threshold.label": "Umbral de la búsqueda difusa",
|
|
373
375
|
"advanced.fuzzy_threshold.help": "Los valores más bajos permiten una coincidencia de entidades más laxa. Rango 0–100.",
|
|
374
|
-
"advanced.entity_search_limit.label": "Límite de resultados de la búsqueda de entidades",
|
|
375
|
-
"advanced.entity_search_limit.help": "Número máximo de entidades que devuelve ha_search_entities. Rango 1–1000.",
|
|
376
376
|
"advanced.automation_config_time_budget.label": "Presupuesto de tiempo para la configuración de automatizaciones (s)",
|
|
377
377
|
"advanced.automation_config_time_budget.help": "Tiempo máximo que la búsqueda profunda dedica a obtener configuraciones de automatizaciones. Rango 1–600. Hay que reiniciar.",
|
|
378
378
|
"advanced.script_config_time_budget.label": "Presupuesto de tiempo para la configuración de scripts (s)",
|
{ha_mcp_dev-7.14.2.dev2169 → ha_mcp_dev-7.14.2.dev2173}/src/ha_mcp/settings_ui/locales/fr.json
RENAMED
|
@@ -353,6 +353,8 @@
|
|
|
353
353
|
"policies.pending.unavailable": "Approbations en direct indisponibles. Vérifie le journal de l'App (add-on).",
|
|
354
354
|
"policies.pending.expires": "Expire : {time}",
|
|
355
355
|
"policies.pending.already_decided": "Cette approbation était déjà {decision}, peut-être par un autre onglet ou une autre session.",
|
|
356
|
+
"policies.pending.decision.approved": "approuvée",
|
|
357
|
+
"policies.pending.decision.denied": "refusée",
|
|
356
358
|
"policies.pending.invalid_token": "Ce jeton d'approbation n'est plus valide (déjà consommé ou expiré).",
|
|
357
359
|
"policies.pending.action_failed": "L'action d'approbation a échoué : {detail}",
|
|
358
360
|
"visibility.errors.reach_server": "Impossible d'atteindre le serveur : {message}",
|