ha-mcp-dev 7.14.2.dev2167__tar.gz → 7.14.2.dev2171__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.dev2167/src/ha_mcp_dev.egg-info → ha_mcp_dev-7.14.2.dev2171}/PKG-INFO +5 -5
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/README.md +4 -4
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/pyproject.toml +1 -1
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/settings_ui/__init__.py +18 -13
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/settings_ui/locales/de.json +3 -1
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/settings_ui/locales/en.json +3 -1
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/settings_ui/locales/es.json +3 -1
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/settings_ui/locales/fr.json +3 -1
- ha_mcp_dev-7.14.2.dev2171/src/ha_mcp/settings_ui/locales/it.json +810 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/settings_ui/locales/ru.json +3 -1
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/settings_ui/locales/zh-Hans.json +10 -8
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/settings_ui/settings.js +45 -6
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171/src/ha_mcp_dev.egg-info}/PKG-INFO +5 -5
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp_dev.egg-info/SOURCES.txt +1 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/LICENSE +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/MANIFEST.in +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/setup.cfg +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/__init__.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/__main__.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/_pypi_marker +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/_version.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/auth/__init__.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/auth/consent_form.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/auth/provider.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/backup_manager.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/browser_landing.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/client/__init__.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/client/rest_client.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/client/supervisor_client.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/client/websocket_client.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/client/websocket_listener.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/config.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/errors.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/llm_exposure.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/policy/__init__.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/policy/approval_queue.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/policy/evaluator.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/policy/handlers.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/policy/middleware.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/policy/model.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/policy/persistence.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/policy/value_sources.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/py.typed +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/read_only.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/resources/skills-vendor/.github/pull_request_template.md +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/evals/evals.json +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/server.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/settings_ui/_i18n.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/settings_ui/_persistence.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/settings_ui/_theme.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/settings_ui/locales/README.md +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/settings_ui/settings.css +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/settings_ui/settings.html +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/smoke_test.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/strict_bps.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/__init__.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/auto_backup.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/backup.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/best_practice_checker.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/component_api.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/component_config_reads.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/component_devices.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/component_registries.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/config_entry_flow.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/device_control.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/helpers.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/radio/__init__.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/radio/base.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/radio/matter.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/radio/thread.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/radio/zigbee.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/radio/zwave.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/reference_validator.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/registry.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/smart_search/_base.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/smart_search/_config.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/tools_addons.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/tools_areas.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/tools_blueprints.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/tools_bug_report.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/tools_calendar.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/tools_camera.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/tools_categories.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/tools_code.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/tools_config_automations.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/tools_dev.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/tools_energy.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/tools_entities.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/tools_filesystem.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/tools_groups.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/tools_hacs.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/tools_history.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/tools_integrations.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/tools_labels.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/tools_radio.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/tools_registry.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/tools_resources.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/tools_search.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/tools_service.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/tools_services.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/tools_system.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/tools_themes.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/tools_todo.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/tools_traces.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/tools_updates.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/tools_utility.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/tools_zones.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/util_helpers.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/tools/validation_middleware.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/transforms/__init__.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/transforms/categorized_search.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/transport_security.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/update_check.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/utils/__init__.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/utils/config_hash.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/utils/config_write_lock.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/utils/data_paths.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/utils/domain_handlers.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/utils/fuzzy_search.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/utils/operation_manager.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/utils/python_sandbox.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/utils/skill_loader.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/utils/usage_logger.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/visibility/__init__.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/visibility/enforcement.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/visibility/model.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/visibility/persistence.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/visibility/resolver.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/tests/__init__.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/tests/test_constants.py +0 -0
- {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/tests/test_env_manager.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ha-mcp-dev
|
|
3
|
-
Version: 7.14.2.
|
|
3
|
+
Version: 7.14.2.dev2171
|
|
4
4
|
Summary: Home Assistant MCP Server - Complete control of Home Assistant through MCP
|
|
5
5
|
Author-email: Julien <github@qc-h.net>
|
|
6
6
|
License: MIT
|
|
@@ -357,9 +357,9 @@ Skills can still be installed manually for clients that prefer local skill files
|
|
|
357
357
|
|
|
358
358
|
## 🔍 Tool Discovery for AI Agents
|
|
359
359
|
|
|
360
|
-
By default, the full tool catalog (~84 tools) is listed to the client through the standard MCP `tools/list` response. Clients with deferred / on-demand tool loading (Claude
|
|
360
|
+
By default, the full tool catalog (~84 tools) is listed to the client through the standard MCP `tools/list` response. Clients with deferred / on-demand tool loading (claude.ai, Claude Desktop, Claude Code) handle that fine — tools are pulled into context only when needed, so idle context cost is near-zero.
|
|
361
361
|
|
|
362
|
-
For
|
|
362
|
+
For setups *without* deferred tool support — models like Claude Haiku, Gemini, OpenAI-compatible local models and smaller open-weights models, or clients that inline all tool schemas regardless of model (e.g. GitHub Copilot CLI) — listing the full tool catalog up front adds a lot of idle context and can overwhelm smaller models. To address that, the server ships with a **search-based discovery mode** built on top of FastMCP's BM25 search transform.
|
|
363
363
|
|
|
364
364
|
### Smaller or local LLMs (Ollama, etc.)
|
|
365
365
|
|
|
@@ -389,11 +389,11 @@ The proxy split lets MCP clients apply different permission policies per categor
|
|
|
389
389
|
|
|
390
390
|
### When to enable
|
|
391
391
|
|
|
392
|
-
- **Claude Haiku, OpenAI-compatible local models, Gemini,
|
|
392
|
+
- **Claude Haiku, OpenAI-compatible local models, Gemini, or any model without native deferred tool support** — large idle-context savings. The same applies to clients that inline all tool schemas regardless of model (e.g. GitHub Copilot CLI, even when running Claude Sonnet/Opus).
|
|
393
393
|
- MCP clients that cap total tool count (some cap at 100) — surfaces a minimal set (~10 tools) instead of 84.
|
|
394
394
|
- **Cost-sensitive deployments** — fewer idle tokens per turn.
|
|
395
395
|
|
|
396
|
-
Leave it off
|
|
396
|
+
Leave it off in clients with deferred tool loading (claude.ai, Claude Desktop, Claude Code); the full catalog has no idle cost there, direct calls skip the search step, and the client's built-in tool search is the better choice — there is no benefit to running ha-mcp's on top of it. Whether tools are deferred depends on the client and model combination: the same model can behave differently per client — GitHub Copilot CLI running Claude Sonnet/Opus inlines the full catalog and still benefits from tool search here. Some Codex models and ChatGPT include deferred tools too — check your client/model directly to confirm its features so you don't leave this enabled unnecessarily.
|
|
397
397
|
|
|
398
398
|
> 🔄 **Refresh your client's tool list after changing this (or any) setting.** Toggling `ENABLE_TOOL_SEARCH` (or changing pinned/disabled tools, Read Only Mode, etc.) changes the tools the server exposes, but your AI client keeps serving its **cached** tool list until it re-fetches. Restarting the add-on or Home Assistant does **not** refresh the client — reconnect or refresh the MCP server in your client (e.g. re-add/refresh the connector in ChatGPT, or close and reopen Claude Desktop). If you skip this, newly enabled tools won't appear in the client at all, and tools the server no longer exposes still show as available but return `Unknown tool` when called. ChatGPT sometimes keeps serving the stale list even after the connector is removed and re-added under the same name — if tools are still missing after re-adding, delete the connector and create a new one with a **different name**.
|
|
399
399
|
|
|
@@ -324,9 +324,9 @@ Skills can still be installed manually for clients that prefer local skill files
|
|
|
324
324
|
|
|
325
325
|
## 🔍 Tool Discovery for AI Agents
|
|
326
326
|
|
|
327
|
-
By default, the full tool catalog (~84 tools) is listed to the client through the standard MCP `tools/list` response. Clients with deferred / on-demand tool loading (Claude
|
|
327
|
+
By default, the full tool catalog (~84 tools) is listed to the client through the standard MCP `tools/list` response. Clients with deferred / on-demand tool loading (claude.ai, Claude Desktop, Claude Code) handle that fine — tools are pulled into context only when needed, so idle context cost is near-zero.
|
|
328
328
|
|
|
329
|
-
For
|
|
329
|
+
For setups *without* deferred tool support — models like Claude Haiku, Gemini, OpenAI-compatible local models and smaller open-weights models, or clients that inline all tool schemas regardless of model (e.g. GitHub Copilot CLI) — listing the full tool catalog up front adds a lot of idle context and can overwhelm smaller models. To address that, the server ships with a **search-based discovery mode** built on top of FastMCP's BM25 search transform.
|
|
330
330
|
|
|
331
331
|
### Smaller or local LLMs (Ollama, etc.)
|
|
332
332
|
|
|
@@ -356,11 +356,11 @@ The proxy split lets MCP clients apply different permission policies per categor
|
|
|
356
356
|
|
|
357
357
|
### When to enable
|
|
358
358
|
|
|
359
|
-
- **Claude Haiku, OpenAI-compatible local models, Gemini,
|
|
359
|
+
- **Claude Haiku, OpenAI-compatible local models, Gemini, or any model without native deferred tool support** — large idle-context savings. The same applies to clients that inline all tool schemas regardless of model (e.g. GitHub Copilot CLI, even when running Claude Sonnet/Opus).
|
|
360
360
|
- MCP clients that cap total tool count (some cap at 100) — surfaces a minimal set (~10 tools) instead of 84.
|
|
361
361
|
- **Cost-sensitive deployments** — fewer idle tokens per turn.
|
|
362
362
|
|
|
363
|
-
Leave it off
|
|
363
|
+
Leave it off in clients with deferred tool loading (claude.ai, Claude Desktop, Claude Code); the full catalog has no idle cost there, direct calls skip the search step, and the client's built-in tool search is the better choice — there is no benefit to running ha-mcp's on top of it. Whether tools are deferred depends on the client and model combination: the same model can behave differently per client — GitHub Copilot CLI running Claude Sonnet/Opus inlines the full catalog and still benefits from tool search here. Some Codex models and ChatGPT include deferred tools too — check your client/model directly to confirm its features so you don't leave this enabled unnecessarily.
|
|
364
364
|
|
|
365
365
|
> 🔄 **Refresh your client's tool list after changing this (or any) setting.** Toggling `ENABLE_TOOL_SEARCH` (or changing pinned/disabled tools, Read Only Mode, etc.) changes the tools the server exposes, but your AI client keeps serving its **cached** tool list until it re-fetches. Restarting the add-on or Home Assistant does **not** refresh the client — reconnect or refresh the MCP server in your client (e.g. re-add/refresh the connector in ChatGPT, or close and reopen Claude Desktop). If you skip this, newly enabled tools won't appear in the client at all, and tools the server no longer exposes still show as available but return `Unknown tool` when called. ChatGPT sometimes keeps serving the stale list even after the connector is removed and re-added under the same name — if tools are still missing after re-adding, delete the connector and create a new one with a **different name**.
|
|
366
366
|
|
|
@@ -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.dev2171"
|
|
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.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/settings_ui/locales/de.json
RENAMED
|
@@ -110,7 +110,7 @@
|
|
|
110
110
|
"visibility.assist.help": "Verstecke Entitäten, die nicht für den Assist-Sprachassistenten (Konversation) von Home Assistant freigegeben sind – entsprechend der Liste Einstellungen > Sprachassistenten > Freigeben. Fügt zwei WebSocket-Lesevorgänge pro Suche hinzu, während es aktiviert ist.",
|
|
111
111
|
"visibility.assist.only_exposed": "Nur für Assist freigegebene Entitäten anzeigen",
|
|
112
112
|
"features.enable_tool_search.label": "Tool-Suche aktivieren",
|
|
113
|
-
"features.enable_tool_search.help": "Ersetzt den vollständigen Tool-Katalog durch suchbasierte Entdeckung. Reduziert den Leerlauf-Kontext
|
|
113
|
+
"features.enable_tool_search.help": "Ersetzt den vollständigen Tool-Katalog durch suchbasierte Entdeckung. Reduziert den Leerlauf-Kontext um rund 90 % auf etwa 5K Tokens. ⚠️ Aktiviere dies NICHT in Clients mit eigener integrierter Tool-Suche / aufgeschobenen Tools (claude.ai, Claude Desktop, Claude Code) – die beiden Suchebenen kollidieren, und die integrierte Tool-Suche des Clients ist dort die bessere Wahl; lasse dies ausgeschaltet. Ob Tools aufgeschoben werden, hängt von der Kombination aus Client und Modell ab: Verwende dies, wenn dein Setup den vollständigen Katalog von Anfang an lädt – Modelle ohne native aufgeschobene Tools (z. B. Gemini, lokale OpenAI-kompatible Modelle, Claude Haiku), Clients, die alle Tool-Schemata unabhängig vom Modell direkt einbetten (z. B. GitHub Copilot CLI), oder kleinere Kontextfenster. Auch einige Codex-Modelle und ChatGPT haben aufgeschobene Tools – prüfe direkt bei deinem Client/Modell, welche Features er hat, damit du dies nicht unnötig aktiviert lässt. Tools werden über ha_search_tools gefunden und über kategorisierte Proxys (read/write/delete) ausgeführt. Erfordert Neustart, um wirksam zu werden.",
|
|
114
114
|
"features.tool_search_max_results.label": "Max. Tool-Suchergebnisse",
|
|
115
115
|
"features.tool_search_max_results.help": "Maximale Anzahl von Tools, die von ha_search_tools zurückgegeben werden, wenn die Tool-Suche aktiviert ist. Niedrigere Werte (2-3) sparen Kontext-Tokens, können aber relevante Tools übersehen. Bereich: 2-10. Erfordert Neustart.",
|
|
116
116
|
"features.enable_tool_security_policies.label": "Tool-Sicherheitsrichtlinien aktivieren (erweitert)",
|
|
@@ -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.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/settings_ui/locales/en.json
RENAMED
|
@@ -110,7 +110,7 @@
|
|
|
110
110
|
"visibility.assist.help": "Hide entities not exposed to Home Assistant's Assist (“conversation”) voice assistant, mirroring the Settings > Voice assistants > Expose list. Adds two websocket reads per search while enabled.",
|
|
111
111
|
"visibility.assist.only_exposed": "Only show entities exposed to Assist",
|
|
112
112
|
"features.enable_tool_search.label": "Enable tool search",
|
|
113
|
-
"features.enable_tool_search.help": "Replace the full tool catalog with search-based discovery. Reduces idle context
|
|
113
|
+
"features.enable_tool_search.help": "Replace the full tool catalog with search-based discovery. Reduces idle context by roughly 90%, to about 5K tokens. ⚠️ Do NOT enable this in clients with their own built-in tool search / deferred tools (claude.ai, Claude Desktop, Claude Code) — the two search layers conflict, and the client's built-in tool search is the better choice there; leave this off. Whether tools are deferred depends on your client and model combination: use this when your setup loads the full catalog up front — models without native deferred tools (e.g. Gemini, OpenAI-compatible local models, Claude Haiku), clients that inline all tool schemas regardless of model (e.g. GitHub Copilot CLI), or smaller context windows. Some Codex models and ChatGPT include deferred tools too — check your client/model directly to confirm its features so you don't leave this enabled unnecessarily. Tools are found via ha_search_tools and executed via categorized proxies (read/write/delete). Requires restart to take effect.",
|
|
114
114
|
"features.tool_search_max_results.label": "Tool search max results",
|
|
115
115
|
"features.tool_search_max_results.help": "Maximum number of tools returned by ha_search_tools when tool search is enabled. Lower values (2-3) save context tokens but may miss relevant tools. Range: 2-10. Requires restart.",
|
|
116
116
|
"features.enable_tool_security_policies.label": "Enable Tool Security Policies (advanced)",
|
|
@@ -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.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/settings_ui/locales/es.json
RENAMED
|
@@ -110,7 +110,7 @@
|
|
|
110
110
|
"visibility.assist.help": "Oculta las entidades no expuestas al asistente de voz Assist («conversation») de Home Assistant, replicando la lista de Ajustes > Asistentes de voz > Exponer. Añade dos lecturas por websocket en cada búsqueda mientras está activado.",
|
|
111
111
|
"visibility.assist.only_exposed": "Mostrar solo las entidades expuestas a Assist",
|
|
112
112
|
"features.enable_tool_search.label": "Activar la búsqueda de herramientas",
|
|
113
|
-
"features.enable_tool_search.help": "Sustituye el catálogo completo de herramientas por un descubrimiento basado en búsqueda. Reduce el contexto en reposo
|
|
113
|
+
"features.enable_tool_search.help": "Sustituye el catálogo completo de herramientas por un descubrimiento basado en búsqueda. Reduce el contexto en reposo en torno a un 90 %, hasta unos 5K tokens. ⚠️ NO actives esto en clientes con su propia búsqueda de herramientas / herramientas diferidas integrada (claude.ai, Claude Desktop, Claude Code): las dos capas de búsqueda entran en conflicto y la búsqueda integrada del cliente es allí la mejor opción; deja esto desactivado. Que las herramientas se difieran depende de la combinación de cliente y modelo: usa esto cuando tu configuración carga el catálogo completo de entrada — modelos sin herramientas diferidas nativas (p. ej. Gemini, modelos locales compatibles con OpenAI, Claude Haiku), clientes que insertan todos los esquemas de herramientas sea cual sea el modelo (p. ej. GitHub Copilot CLI) o ventanas de contexto más pequeñas. Algunos modelos Codex y ChatGPT también incluyen herramientas diferidas: comprueba directamente con tu cliente/modelo qué características tiene para no dejar esto activado innecesariamente. Las herramientas se localizan mediante ha_search_tools y se ejecutan a través de proxies por categoría (lectura/escritura/borrado). Requiere reiniciar para que surta efecto.",
|
|
114
114
|
"features.tool_search_max_results.label": "Máximo de resultados de la búsqueda de herramientas",
|
|
115
115
|
"features.tool_search_max_results.help": "Número máximo de herramientas que devuelve ha_search_tools cuando la búsqueda de herramientas está activada. Los valores bajos (2-3) ahorran tokens de contexto pero pueden dejar fuera herramientas relevantes. Rango: 2-10. Requiere reiniciar.",
|
|
116
116
|
"features.enable_tool_security_policies.label": "Activar las políticas de seguridad de herramientas (avanzado)",
|
|
@@ -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}",
|
{ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2171}/src/ha_mcp/settings_ui/locales/fr.json
RENAMED
|
@@ -110,7 +110,7 @@
|
|
|
110
110
|
"visibility.assist.help": "Masque les entités non exposées à l'assistant vocal Assist (« conversation ») de Home Assistant, en miroir de la liste Paramètres > Assistants vocaux > Exposer. Ajoute deux lectures websocket par recherche lorsqu'il est activé.",
|
|
111
111
|
"visibility.assist.only_exposed": "Afficher uniquement les entités exposées à Assist",
|
|
112
112
|
"features.enable_tool_search.label": "Activer la recherche d'outils",
|
|
113
|
-
"features.enable_tool_search.help": "Remplace le catalogue complet d'outils par une découverte basée sur la recherche. Réduit le contexte inactif d'environ
|
|
113
|
+
"features.enable_tool_search.help": "Remplace le catalogue complet d'outils par une découverte basée sur la recherche. Réduit le contexte inactif d'environ 90 %, à près de 5K tokens. ⚠️ N'active PAS ceci dans les clients qui ont leur propre recherche d'outils intégrée / outils différés (claude.ai, Claude Desktop, Claude Code) — les deux couches de recherche entrent en conflit, et la recherche d'outils intégrée du client y est le meilleur choix ; laisse ceci désactivé. Le report des outils dépend de la combinaison client/modèle : utilise ceci lorsque ta configuration charge le catalogue complet d'emblée — modèles sans outils différés natifs (p. ex. Gemini, modèles locaux compatibles OpenAI, Claude Haiku), clients qui intègrent tous les schémas d'outils quel que soit le modèle (p. ex. GitHub Copilot CLI), ou fenêtres de contexte plus petites. Certains modèles Codex et ChatGPT incluent aussi des outils différés — vérifie directement auprès de ton client/modèle quelles fonctionnalités il possède pour ne pas laisser ceci activé inutilement. Les outils sont trouvés via ha_search_tools et exécutés via des proxys catégorisés (lecture/écriture/suppression). Nécessite un redémarrage pour prendre effet.",
|
|
114
114
|
"features.tool_search_max_results.label": "Résultats max. de la recherche d'outils",
|
|
115
115
|
"features.tool_search_max_results.help": "Nombre maximum d'outils renvoyés par ha_search_tools lorsque la recherche d'outils est activée. Des valeurs plus basses (2-3) économisent des tokens de contexte mais peuvent manquer des outils pertinents. Plage : 2-10. Nécessite un redémarrage.",
|
|
116
116
|
"features.enable_tool_security_policies.label": "Activer les politiques de sécurité des outils (avancé)",
|
|
@@ -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}",
|