ha-mcp-dev 8.2.0.dev2360__tar.gz → 8.2.0.dev2364__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ha_mcp_dev-8.2.0.dev2360/src/ha_mcp_dev.egg-info → ha_mcp_dev-8.2.0.dev2364}/PKG-INFO +2 -2
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/README.md +1 -1
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/pyproject.toml +1 -1
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +1 -1
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +1 -1
- ha_mcp_dev-8.2.0.dev2364/src/ha_mcp/resources/skills-vendor/AGENTS.md +57 -0
- ha_mcp_dev-8.2.0.dev2364/src/ha_mcp/resources/skills-vendor/CLAUDE.md +57 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +1 -1
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -30
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/locales/cs.json +32 -32
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/locales/de.json +35 -35
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/locales/eo.json +35 -35
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/locales/es.json +35 -35
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/locales/fr.json +35 -35
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/locales/it.json +34 -34
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/locales/nl.json +35 -35
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/locales/pl.json +35 -35
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/locales/ru.json +35 -35
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/locales/sv.json +35 -35
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/locales/zh-Hans.json +35 -35
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364/src/ha_mcp_dev.egg-info}/PKG-INFO +2 -2
- ha_mcp_dev-8.2.0.dev2360/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -40
- ha_mcp_dev-8.2.0.dev2360/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -40
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/LICENSE +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/MANIFEST.in +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/setup.cfg +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/__init__.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/__main__.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_pypi_marker +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_rich_compat.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/__init__.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/requirements.txt +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/client.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/server.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_vendor/websockets/version.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/_version.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/auth/__init__.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/auth/consent_form.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/auth/oidc_compat.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/auth/provider.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/backup_manager.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/browser_landing.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/client/__init__.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/client/rest_client.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/client/supervisor_client.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/client/websocket_client.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/client/websocket_listener.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/config.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/errors.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/hacs_auto_refresh.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/llm_exposure.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/policy/__init__.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/policy/approval_queue.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/policy/editing.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/policy/evaluator.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/policy/handlers.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/policy/middleware.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/policy/model.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/policy/persistence.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/policy/value_sources.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/py.typed +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/read_only.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/redaction.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/renamed_tools.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/resources/skills-vendor/.github/pull_request_template.md +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/evals/evals.json +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/server.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/__init__.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/_i18n.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/_persistence.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/_theme.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/locales/README.md +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/locales/en.json +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/settings.css +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/settings.html +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/settings.js +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/smoke_test.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/strict_bps.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/__init__.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/auto_backup.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/backup.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/best_practice_checker.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/best_practice_result.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/best_practice_variables.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/component_api.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/component_config_entries.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/component_config_reads.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/component_devices.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/component_registries.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/config_entry_flow.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/config_entry_identity.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/device_control.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/error_log_parsing.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/hacs_registration.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/helpers.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/radio/__init__.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/radio/base.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/radio/matter.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/radio/thread.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/radio/zigbee.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/radio/zwave.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/reference_validator.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/registry.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/smart_search/_base.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/smart_search/_config.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_addons.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_areas.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_blueprints.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_bug_report.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_calendar.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_camera.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_categories.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_code.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_config_automations.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_dev.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_energy.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_entities.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_filesystem.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_groups.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_hacs.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_history.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_integrations.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_labels.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_radio.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_registry.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_resources.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_search.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_security_policy.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_service.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_services.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_system.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_themes.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_todo.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_traces.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_updates.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_utility.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/tools_zones.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/util_helpers.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/tools/validation_middleware.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/transforms/__init__.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/transforms/categorized_search.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/transport_security.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/update_check.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/utils/__init__.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/utils/config_hash.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/utils/config_write_lock.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/utils/data_paths.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/utils/domain_handlers.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/utils/fuzzy_search.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/utils/operation_manager.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/utils/python_sandbox.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/utils/skill_loader.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/utils/usage_logger.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/visibility/__init__.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/visibility/enforcement.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/visibility/model.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/visibility/persistence.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/visibility/resolver.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp_dev.egg-info/SOURCES.txt +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/tests/__init__.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/tests/test_constants.py +0 -0
- {ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/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: 8.2.0.
|
|
3
|
+
Version: 8.2.0.dev2364
|
|
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
|
|
@@ -396,7 +396,7 @@ Leave it off in clients with deferred tool loading (claude.ai, Claude Desktop, C
|
|
|
396
396
|
|
|
397
397
|
> 🔄 **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 app 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**.
|
|
398
398
|
|
|
399
|
-
For the HA app, the same option is documented in [`homeassistant-addon/DOCS.md`](homeassistant-addon/DOCS.md#enable_tool_search) along with the in-
|
|
399
|
+
For the HA app, the same option is documented in [`homeassistant-addon/DOCS.md`](homeassistant-addon/DOCS.md#enable_tool_search) along with the in-app settings UI for fine-grained tool enable/disable/pin.
|
|
400
400
|
|
|
401
401
|
---
|
|
402
402
|
|
|
@@ -364,7 +364,7 @@ Leave it off in clients with deferred tool loading (claude.ai, Claude Desktop, C
|
|
|
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 app 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
|
|
|
367
|
-
For the HA app, the same option is documented in [`homeassistant-addon/DOCS.md`](homeassistant-addon/DOCS.md#enable_tool_search) along with the in-
|
|
367
|
+
For the HA app, the same option is documented in [`homeassistant-addon/DOCS.md`](homeassistant-addon/DOCS.md#enable_tool_search) along with the in-app settings UI for fine-grained tool enable/disable/pin.
|
|
368
368
|
|
|
369
369
|
---
|
|
370
370
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "ha-mcp-dev"
|
|
7
|
-
version = "8.2.0.
|
|
7
|
+
version = "8.2.0.dev2364"
|
|
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
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "home-assistant-skills",
|
|
3
3
|
"description": "Agent skills for Home Assistant: best practices for automations, helpers, templates, device control, and dashboards.",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.15.0",
|
|
5
5
|
"repository": "https://github.com/homeassistant-ai/skills",
|
|
6
6
|
"license": "MIT"
|
|
7
7
|
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# CLAUDE.md
|
|
2
|
+
|
|
3
|
+
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
4
|
+
|
|
5
|
+
## Project Overview
|
|
6
|
+
|
|
7
|
+
This is a community-contributed collection of **Agent Skills** for Home Assistant, following the open [Agent Skills standard](https://agentskills.io/specification). Skills teach AI agents domain expertise for configuring and controlling Home Assistant. The repository doubles as a Claude Code plugin (see `.claude-plugin/plugin.json`).
|
|
8
|
+
|
|
9
|
+
## Repository Structure
|
|
10
|
+
|
|
11
|
+
- `skills/<skill-name>/SKILL.md` — each skill lives in its own folder with a `SKILL.md` file
|
|
12
|
+
- `CONTRIBUTING.md` — skill authoring guidelines and submission workflow
|
|
13
|
+
- `.claude-plugin/plugin.json` — Claude Code plugin metadata
|
|
14
|
+
- `.claude-plugin/marketplace.json` — marketplace metadata for plugin discovery
|
|
15
|
+
- `AGENTS.md` — symlink to `CLAUDE.md` (for agents that use `AGENTS.md` convention)
|
|
16
|
+
- `.github/ISSUE_TEMPLATE/skill-rca.md` — "Report Bad Skill Advice" issue template
|
|
17
|
+
|
|
18
|
+
## Skill Format
|
|
19
|
+
|
|
20
|
+
Every skill is a `SKILL.md` file with YAML frontmatter:
|
|
21
|
+
|
|
22
|
+
```yaml
|
|
23
|
+
---
|
|
24
|
+
name: skill-name-here
|
|
25
|
+
description: >
|
|
26
|
+
When to activate this skill and what symptoms it addresses.
|
|
27
|
+
---
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Constraints from CONTRIBUTING.md:
|
|
31
|
+
- Max **500 lines** per SKILL.md
|
|
32
|
+
- `metadata.version` must be `0` on new skills (do not edit manually)
|
|
33
|
+
- `name` must match `[a-z0-9-]+` and be ≤64 characters
|
|
34
|
+
- `description` frontmatter must be **≤1024 characters** (CI enforces this via `skills-ref validate`)
|
|
35
|
+
- Reference files must be **one level deep** only (e.g. `references/example.yaml`)
|
|
36
|
+
- Use **forward slashes** in all file paths
|
|
37
|
+
- Optional subdirectories: `references/` (additional docs), `scripts/` (utility scripts), `assets/` (static resources)
|
|
38
|
+
|
|
39
|
+
## Skill Authoring Principles
|
|
40
|
+
|
|
41
|
+
- **Context window conservation** — only include domain-specific knowledge that agents lack; omit general programming advice
|
|
42
|
+
- **Conciseness** — provide patterns and quick-reference tables, not tutorials
|
|
43
|
+
- **Consistent terminology** — one term per concept throughout a skill
|
|
44
|
+
- **Symptom-based triggering** — the `description` frontmatter should describe observable agent behaviors that signal the skill is needed
|
|
45
|
+
- **No tool names** — reference HA REST APIs and concepts, never specific MCP tool names (e.g. `ha_rename_entity`); tool names vary by agent setup
|
|
46
|
+
|
|
47
|
+
## Validation
|
|
48
|
+
|
|
49
|
+
CI runs two workflows on PRs and pushes to `main`:
|
|
50
|
+
- **validate-skills** — runs `skills-ref validate` on every skill when `skills/**` changes
|
|
51
|
+
- **validate-plugin** — validates `.claude-plugin/` metadata
|
|
52
|
+
|
|
53
|
+
To validate locally:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
uvx skills-ref validate skills/<skill-name>
|
|
57
|
+
```
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# CLAUDE.md
|
|
2
|
+
|
|
3
|
+
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
4
|
+
|
|
5
|
+
## Project Overview
|
|
6
|
+
|
|
7
|
+
This is a community-contributed collection of **Agent Skills** for Home Assistant, following the open [Agent Skills standard](https://agentskills.io/specification). Skills teach AI agents domain expertise for configuring and controlling Home Assistant. The repository doubles as a Claude Code plugin (see `.claude-plugin/plugin.json`).
|
|
8
|
+
|
|
9
|
+
## Repository Structure
|
|
10
|
+
|
|
11
|
+
- `skills/<skill-name>/SKILL.md` — each skill lives in its own folder with a `SKILL.md` file
|
|
12
|
+
- `CONTRIBUTING.md` — skill authoring guidelines and submission workflow
|
|
13
|
+
- `.claude-plugin/plugin.json` — Claude Code plugin metadata
|
|
14
|
+
- `.claude-plugin/marketplace.json` — marketplace metadata for plugin discovery
|
|
15
|
+
- `AGENTS.md` — symlink to `CLAUDE.md` (for agents that use `AGENTS.md` convention)
|
|
16
|
+
- `.github/ISSUE_TEMPLATE/skill-rca.md` — "Report Bad Skill Advice" issue template
|
|
17
|
+
|
|
18
|
+
## Skill Format
|
|
19
|
+
|
|
20
|
+
Every skill is a `SKILL.md` file with YAML frontmatter:
|
|
21
|
+
|
|
22
|
+
```yaml
|
|
23
|
+
---
|
|
24
|
+
name: skill-name-here
|
|
25
|
+
description: >
|
|
26
|
+
When to activate this skill and what symptoms it addresses.
|
|
27
|
+
---
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Constraints from CONTRIBUTING.md:
|
|
31
|
+
- Max **500 lines** per SKILL.md
|
|
32
|
+
- `metadata.version` must be `0` on new skills (do not edit manually)
|
|
33
|
+
- `name` must match `[a-z0-9-]+` and be ≤64 characters
|
|
34
|
+
- `description` frontmatter must be **≤1024 characters** (CI enforces this via `skills-ref validate`)
|
|
35
|
+
- Reference files must be **one level deep** only (e.g. `references/example.yaml`)
|
|
36
|
+
- Use **forward slashes** in all file paths
|
|
37
|
+
- Optional subdirectories: `references/` (additional docs), `scripts/` (utility scripts), `assets/` (static resources)
|
|
38
|
+
|
|
39
|
+
## Skill Authoring Principles
|
|
40
|
+
|
|
41
|
+
- **Context window conservation** — only include domain-specific knowledge that agents lack; omit general programming advice
|
|
42
|
+
- **Conciseness** — provide patterns and quick-reference tables, not tutorials
|
|
43
|
+
- **Consistent terminology** — one term per concept throughout a skill
|
|
44
|
+
- **Symptom-based triggering** — the `description` frontmatter should describe observable agent behaviors that signal the skill is needed
|
|
45
|
+
- **No tool names** — reference HA REST APIs and concepts, never specific MCP tool names (e.g. `ha_rename_entity`); tool names vary by agent setup
|
|
46
|
+
|
|
47
|
+
## Validation
|
|
48
|
+
|
|
49
|
+
CI runs two workflows on PRs and pushes to `main`:
|
|
50
|
+
- **validate-skills** — runs `skills-ref validate` on every skill when `skills/**` changes
|
|
51
|
+
- **validate-plugin** — validates `.claude-plugin/` metadata
|
|
52
|
+
|
|
53
|
+
To validate locally:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
uvx skills-ref validate skills/<skill-name>
|
|
57
|
+
```
|
|
@@ -927,36 +927,6 @@ variables:
|
|
|
927
927
|
|
|
928
928
|
`trigger_variables:` is a separate top-level key evaluated **before** triggers fire — it supports **limited templates only** (no `states()`/`state_attr()`), mainly for passing a blueprint `!input` into trigger options. Don't put state-based templates there.
|
|
929
929
|
|
|
930
|
-
### Keys render in order, one at a time
|
|
931
|
-
|
|
932
|
-
A `variables:` block renders one key at a time, each rendered result feeding the context for the next. A key that reads a name declared **further down the same block** reads it while it is still undefined.
|
|
933
|
-
|
|
934
|
-
```yaml
|
|
935
|
-
# AVOID — `total` is still undefined when `msg` renders
|
|
936
|
-
variables:
|
|
937
|
-
msg: "Total: {{ total }}"
|
|
938
|
-
total: "{{ states('sensor.a') | float(0) + states('sensor.b') | float(0) }}"
|
|
939
|
-
|
|
940
|
-
# CORRECT — declare before use
|
|
941
|
-
variables:
|
|
942
|
-
total: "{{ states('sensor.a') | float(0) + states('sensor.b') | float(0) }}"
|
|
943
|
-
msg: "Total: {{ total }}"
|
|
944
|
-
```
|
|
945
|
-
|
|
946
|
-
What the forward read costs depends on how the template uses the name (behavior as of 2026.7):
|
|
947
|
-
|
|
948
|
-
| Use of the undefined name | Result |
|
|
949
|
-
|---|---|
|
|
950
|
-
| `x.attr`, `x['k']`, arithmetic, `<`/`>`/`<=`/`>=`, `\| int`, `\| float` | Raises `UndefinedError`, logs ERROR — **aborts the run** |
|
|
951
|
-
| `{{ x }}`, `{% if x %}`, `{% for i in x %}`, `'p' ~ x` | Empty and falsy, logs WARNING — runs on into the else branch |
|
|
952
|
-
| `x \| length`, `x == y`, `x != y` | `0` / `False` / `True` — **no log and no trace entry** |
|
|
953
|
-
|
|
954
|
-
For the aborting row, [`continue_on_error:`](#continue-on-error) is no escape — it is an action option, a top-level block is not an action, and on a mid-sequence step it cannot suppress a render error. A default like `| int(0)` does not save it either: the default covers an unconvertible value, not an undefined name. In the silent row, watch `!=`: `{% if later != 'x' %}` on a name that is not defined yet takes the **then** branch, leaving nothing behind to explain why.
|
|
955
|
-
|
|
956
|
-
Not a problem when the name also exists in an enclosing scope — the reference then resolves outward to that value. The two placements diverge on that collision, though: a top-level `variables:` block **skips** a key already present in the incoming scope, so the incoming value stands and the block's own definition never takes effect for that run, while a mid-sequence `- variables:` step renders and **overwrites** it. Staging a computation across consecutive `variables:` steps is therefore mid-sequence only.
|
|
957
|
-
|
|
958
|
-
When an automation declares both `trigger_variables:` and `variables:`, the two render as one sequential mapping with `trigger_variables:` first, so a `variables:` key may read a `trigger_variables:` key but not the reverse. That holds for names declared in only one of the two: a name in both merges into a single entry that keeps the `trigger_variables:` position but takes the `variables:` template, so it renders early — before any `trigger_variables:` key declared after it. The separate attach-time render noted above happens before any `variables:` key exists.
|
|
959
|
-
|
|
960
930
|
---
|
|
961
931
|
|
|
962
932
|
## Capturing Action Responses
|
{ha_mcp_dev-8.2.0.dev2360 → ha_mcp_dev-8.2.0.dev2364}/src/ha_mcp/settings_ui/locales/cs.json
RENAMED
|
@@ -28,9 +28,9 @@
|
|
|
28
28
|
"tabs.policies": "Zásady zabezpečení nástrojů",
|
|
29
29
|
"tabs.visibility": "Viditelnost entit",
|
|
30
30
|
"tabs.accessibility": "Přístupnost",
|
|
31
|
-
"notice.restart_required": "⚠ Změny uloženy.
|
|
32
|
-
"notice.shared_settings": "Funkce pro celý server (vyhledávání nástrojů,
|
|
33
|
-
"notice.env_pins": "Nástroje uvedené v proměnných prostředí <code>DISABLED_TOOLS</code> nebo <code>PINNED_TOOLS</code> jsou
|
|
31
|
+
"notice.restart_required": "⚠ Změny uloženy. Aby se projevily, restartujte HA-MCP. Při příštím spuštění HA-MCP zcela odstraní zakázané nástroje ze seznamu nástrojů MCP. Poté znovu připojte nebo obnovte server MCP ve svém AI klientovi (např. obnovte seznam nástrojů na claude.ai, znovu přidejte/obnovte konektor v ChatGPT nebo zavřete a znovu otevřete Claude Desktop), aby se seznam nástrojů načetl znovu. Restartování aplikace (doplňku) nebo Home Assistant NEZAPOMENE obnovit mezipaměť seznamu nástrojů vašeho klienta. ChatGPT někdy nadále poskytuje seznam nástrojů z mezipaměti i po odebrání a opětovném přidání konektoru – pokud nástroje stále chybí, odstraňte konektor a vytvořte nový pod jiným názvem.",
|
|
32
|
+
"notice.shared_settings": "Funkce platné pro celý server (vyhledávání nástrojů, úpravy konfigurace YAML, nástroje souborového systému atd.) se objevují jak na kartě <strong>Server Settings</strong>, tak na stránce Konfigurace aplikace (doplňku); v obou případech jde o totožné nastavení. Po restartování aplikace (doplňku) zůstává jedno rozhraní synchronizované s druhým. Změny vyžadují restartování HA-MCP.",
|
|
33
|
+
"notice.env_pins": "Nástroje uvedené v proměnných prostředí <code>DISABLED_TOOLS</code> nebo <code>PINNED_TOOLS</code> jsou zamčené pouze pro čtení; chcete-li je upravit zde, zrušte nastavení proměnné prostředí. Přepínače připnutí se projeví pouze tehdy, když je povoleno vyhledávání nástrojů (karta Server Settings nebo stránka Konfigurace aplikace (doplňku)).",
|
|
34
34
|
"actions.restart_addon": "Restartovat aplikaci (doplněk)",
|
|
35
35
|
"actions.save": "Uložit",
|
|
36
36
|
"actions.save_settings": "Uložit nastavení",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"tools.read_only.help": "Vypne všechny nástroje pro zápis a zablokuje každému nástroji provádění zápisových nebo destruktivních volání. Nástroje pro smíšené čtení/zápis (zálohy, aplikace (doplňky), preference energie, hlasové pipeline a režim kódu, pokud je povolen) zůstanou dostupné s blokovanými operacemi zápisu.",
|
|
41
41
|
"tools.read_only.unknown": "Nepodařilo se načíst nastavení serveru. Stav režimu pouze pro čtení je neznámý; toto zobrazení nemusí odrážet to, co server vynucuje.",
|
|
42
42
|
"tools.search": "Hledat nástroje...",
|
|
43
|
-
"server.auto_save_notice": "Nastavení na této kartě se
|
|
43
|
+
"server.auto_save_notice": "Nastavení na této kartě se ukládá automaticky. Změny se projeví až po restartování HA-MCP (aplikuje je na straně serveru) a opětovném připojení nebo obnovení serveru MCP ve vašem AI klientovi (znovu načte seznam nástrojů), např. obnovením seznamu nástrojů na claude.ai, opětovným přidáním nebo obnovením konektoru v ChatGPT, případně zavřením a opětovným otevřením Claude Desktop. ChatGPT někdy nadále poskytuje seznam nástrojů z mezipaměti i po odebrání a opětovném přidání konektoru – pokud nástroje stále chybí, odstraňte konektor a vytvořte nový pod jiným názvem.",
|
|
44
44
|
"server.sections.search": "Vyhledávání a shoda",
|
|
45
45
|
"server.sections.operations": "Operace",
|
|
46
46
|
"server.sections.tool_surface": "Rozhraní nástrojů",
|
|
@@ -61,10 +61,10 @@
|
|
|
61
61
|
"policies.global.title": "Globální nastavení",
|
|
62
62
|
"policies.global.unknown": "Nepodařilo se načíst nastavení serveru. Dva přepínače níže jsou zobrazeny jako neznámé a nelze je změnit, dokud se stránka úspěšně nenačte; toto zobrazení nemusí odrážet to, co server vynucuje.",
|
|
63
63
|
"policies.global.enabled.label": "Povolit zásady zabezpečení nástrojů",
|
|
64
|
-
"policies.global.enabled.help": "Hlavní
|
|
64
|
+
"policies.global.enabled.help": "Hlavní vypínač. Zrcadlí přepínač v Server Settings. Ve výchozím nastavení vypnuto. Zapnutím a restartováním HA-MCP aktivujete middleware pro řízení přístupu. Když je vypnuto, níže uvedená pravidla zůstávají zachována, ale nevynucují se.",
|
|
65
65
|
"policies.global.manage_tool.label": "Povolit AI agentům upravovat tyto zásady (ha_manage_security_policy)",
|
|
66
66
|
"policies.global.manage_tool.help": "Registruje nástroj ha_manage_security_policy, který čte a nahrazuje dokument zásad, který tato karta upravuje. Ve výchozím nastavení vypnuto. Nezávisle na hlavním přepínači výše: toto řídí, kdo může pravidla upravovat, nikoli zda jsou vynucována. Nástroj nezpřístupňuje operace fronty čekajících schválení, ale akce nastavení řízená zásadami může stále vyžadovat schválení.",
|
|
67
|
-
"policies.global.manage_tool.warning": "
|
|
67
|
+
"policies.global.manage_tool.warning": "Povolením této funkce umožníte připojeným AI agentům přepisovat bezpečnostní pravidla na této kartě, včetně odstranění bran schvalování. Chcete-li zachovat dohled člověka, zabezpečte nástroj PŘED jeho zapnutím: na kartě Tools zapněte „security gated“ pro Manage Security Policy. Toto pravidlo lze vytvořit, když je nástroj stále vypnutý, a začne se vynucovat, jakmile bude výše uvedený hlavní vypínač zapnutý a server restartovaný. Po přepnutí libovolného přepínače restartujte aplikaci (doplněk).",
|
|
68
68
|
"policies.global.wait.label": "Čekat sekund (5-600)",
|
|
69
69
|
"policies.global.wait.help": "Jak dlouho middleware čeká na schválení před vypršením časového limitu.",
|
|
70
70
|
"policies.global.ttl.label": "TTL schválení minut (1-60)",
|
|
@@ -127,9 +127,9 @@
|
|
|
127
127
|
"features.enable_tool_security_policies.label": "Povolit zásady zabezpečení nástrojů (pokročilé)",
|
|
128
128
|
"features.enable_tool_security_policies.help": "Podmiňuje vysoce rizikové volání nástrojů (ovládání zámků/alarmů, zápisy automatizací atd.) schválením uživatelem. Když je volán chráněný nástroj, agent řekne uživateli, aby otevřel záložku Zásady zabezpečení nástrojů ve webovém rozhraní a klikl na Schválit, než volání pokračuje. Pravidla pro jednotlivé nástroje s volitelnými podmínkami argumentů se konfigurují na záložce Zásady zabezpečení nástrojů. Ve výchozím nastavení vypnuto. Vyžaduje restart, aby se projevilo.",
|
|
129
129
|
"features.read_only_mode.label": "Režim pouze pro čtení",
|
|
130
|
-
"features.read_only_mode.help": "Vypne všechny nástroje pro zápis a
|
|
130
|
+
"features.read_only_mode.help": "Vypne všechny nástroje pro zápis a odstraní schopnost nástrojů provádět jakékoli zápisy nebo destruktivní volání. Smíšené nástroje pro čtení/zápis – zálohy, aplikace (doplňky), preference energie, hlasové pipelines a režim kódu, pokud je povolen – zůstávají k dispozici se zablokovanými operacemi zápisu. Stejný přepínač jako na kartě Tools ve webovém rozhraní. Ve výchozím nastavení vypnuto. K projevům změn je vyžadován restart.",
|
|
131
131
|
"features.redact_secrets.label": "Redigovat tajemství",
|
|
132
|
-
"features.redact_secrets.help": "
|
|
132
|
+
"features.redact_secrets.help": "Skrývá tajné údaje z odpovědí nástrojů, než se dostanou k AI asistenci. Možnosti aplikace (doplňku) a pole integrací označená jako hesla jsou nahrazena značkou nastaveno/prázdno (takže zůstává možné odpovědět na otázku „je tento pověření nastaveno?“), a z odpovědí ostatních nástrojů jsou odstraněny tajné hodnoty, které server již viděl (hodnoty kratší než 6 znaků se přeskakují, protože nahrazování drobných fragmentů by poškodilo nesouvisející výstup). Pole, která nejsou svým schématem označena jako hesla, nelze detekovat. Ve výchozím nastavení vypnuto.",
|
|
133
133
|
"features.enable_mandatory_bps.label": "Připojit dovednosti osvědčených postupů při zápisu",
|
|
134
134
|
"features.enable_mandatory_bps.help": "Hlavní přepínač pro funkci doručování obsahu dovedností nástrojů pro zápis (problém #1182). Pokud je povoleno (výchozí), šest konfiguračních nástrojů pro zápis (automatizace, skripty, scény, pomocníci, řídicí panely, čistý YAML) připojí kanonické referenční soubory osvědčených postupů Home Assistant pod `skill_content` při každém úspěšném zápisu, plus automaticky vloží jakékoli referenční sekce citované varováními o osvědčených postupech. Každý nástroj také zpřístupňuje parametr `MandatoryBPS` pro každé volání, který může agent nastavit na false při následných voláních, jakmile má obsah. Když je tento hlavní přepínač vypnutý, ŽÁDNÝ `skill_content` není odeslán bez ohledu na parametr pro každé volání nebo varování BP. Doporučeno ZAPNUTO jako první volba; vypněte pouze pro modely s velmi malými kontextovými okny. Vypnutí této funkce může snížit přesnost zápisu. Vyžaduje restart, aby se projevilo.",
|
|
135
135
|
"features.enable_strict_mandatory_bps.label": "Přísný režim osvědčených postupů",
|
|
@@ -149,11 +149,11 @@
|
|
|
149
149
|
"features.enable_filesystem_tools.label": "Povolit nástroje souborového systému (beta)",
|
|
150
150
|
"features.enable_filesystem_tools.help": "Nastaví HAMCP_ENABLE_FILESYSTEM_TOOLS=true. Povoluje přímý přístup pro čtení/zápis souborů do vašeho souborového systému Home Assistant. VAROVÁNÍ: Tímto získá MCP server citlivý přímý přístup k souborům ve vašem systému. Povolte pouze v případě, že důvěřujete AI asistentovi s operacemi se soubory. Vyžaduje restart, aby se změny projevily. VYŽADUJE, aby byl zapnut hlavní přepínač „Enable beta features“ výše (a ve webovém rozhraní) — jinak je tento podřízený příznak za běhu ignorován bez ohledu na jeho hodnotu zde.",
|
|
151
151
|
"features.enable_code_mode.label": "Povolit sandbox vlastních nástrojů (beta)",
|
|
152
|
-
"features.enable_code_mode.help": "
|
|
152
|
+
"features.enable_code_mode.help": "Funkce v beta verzi. Povoluje nástroj ha_manage_custom_tool, který umožňuje AI asistentům vytvářet, spouštět, ukládat a mazat vlastní kód v Pythonu v zabezpečeném sandboxu, když žádný vestavěný nástroj nedokáže požadavek zpracovat. Kód běží v izolovaném interpretu bez přístupu k souborovému systému nebo libovolné síti. Kód v sandboxu může přistupovat k REST API HA (api_get/api_post), odesílat příkazy WebSocket (ws_send), volat existující nástroje MCP (call_tool) nebo odstranit uložený nástroj (delete_saved_tool). Uložené nástroje se ve výchozím nastavení ukládají do /data/saved_tools.json, takže přežijí restarty aplikace (doplňku) a jsou viditelné pro každého klienta, který se může připojit. Známá omezení naleznete v docs/beta.md. K projevům změn je vyžadován restart. VYŽADUJE, aby byl výše uvedený hlavní přepínač „Enable beta features“ zapnutý (a to i ve webovém rozhraní) – v opačném případě bude tento dílčí příznak za běhu ignorován bez ohledu na jeho hodnotu zde.",
|
|
153
153
|
"features.enable_lite_docstrings.label": "Povolit zjednodušené docstringy nástrojů (beta)",
|
|
154
154
|
"features.enable_lite_docstrings.help": "Beta funkce. Nahrazuje docstringy u několika náročných nástrojů ha-mcp (automations, scripts, scenes, helpers, dashboards, ha_call_service, ha_config_set_yaml) kratšími variantami, které odkládají podrobnosti o schématu a příkladech na nástroj ha_get_skill_guide (nebo jeho skill:// resource). UPOZORNĚNÍ: toto snižuje využití tokenů v nečinnosti, ale může snížit výkon LLM — zkrácené popisy spoléhají na to, že LLM skutečně zavolá nástroj skill nebo přečte skill resource pro podrobnosti, což není zaručeno (některé modely přeskočí dodatečné volání nástroje a skončí s menším vedením, než měly dříve). Nejlépe se kombinuje s klientem, který podporuje MCP resources nebo s enable_tool_search. Vyžaduje restart, aby se projevilo. VYŽADUJE, aby byl hlavní přepínač „Enable beta features“ výše (a ve web UI) zapnutý — jinak je tento podřízený příznak za runtime ignorován bez ohledu na jeho hodnotu zde.",
|
|
155
155
|
"features.enable_dashboard_screenshot.label": "Povolit režim snímání obrazovky dashboardu (beta)",
|
|
156
|
-
"features.enable_dashboard_screenshot.help": "
|
|
156
|
+
"features.enable_dashboard_screenshot.help": "Funkce v beta verzi – ve výchozím nastavení zakázána. Přidává nástroj ha_get_dashboard_screenshot a volby include_screenshot / return_screenshot k nástrojům pro získání/nastavení nástěnek, takže AI asistenti mohou kontrolovat jeden nebo více responzivních obrázků Lovelace (např. pro ověření právě vytvořené nástěnky). Podporuje stabilní pojmenované pohledy, dávky pro mobily/tablety/desktopy a výstup v PNG/JPEG/WebP/BMP. Vykreslování běží v samostatném volitelném enginu – „Puppet“ aplikaci (doplňku) od ballooba, což je headless Chromium –, který nainstalujete jednou (přidáte balloobův repozitář do obchodu s aplikacemi a nainstalujete „Puppet“) a poskytnete mu přístupový token s dlouhou platností; v nasazeních Docker/Container tento engine spustíte jako vedlejší kontejner (sidecar) a nastavíte proměnnou HAMCP_DASHBOARD_SCREENSHOT_ENGINE_URL. Nic náročného se neinstaluje, dokud obojí nepovolíte a nenainstalujete daný engine. K projevům změn je vyžadován restart. VYŽADUJE, aby byl výše uvedený hlavní přepínač „Enable beta features“ zapnutý (a to i ve webovém rozhraní) – v opačném případě bude tento dílčí příznak za běhu ignorován bez ohledu na jeho hodnotu zde.",
|
|
157
157
|
"actions.restart_server": "Restartovat server HA-MCP",
|
|
158
158
|
"actions.restart_confirm": "Restartovat HA-MCP nyní? Stránka se automaticky znovu načte, jakmile bude opět online.",
|
|
159
159
|
"actions.view": "Zobrazit",
|
|
@@ -181,7 +181,7 @@
|
|
|
181
181
|
"status.stopped_offline": "Zastaveno. Tato stránka přejde do režimu offline",
|
|
182
182
|
"status.stopped_connection": "Zastaveno (spojení přerušeno)",
|
|
183
183
|
"status.restarting": "Restartování…",
|
|
184
|
-
"status.waiting_addon": "
|
|
184
|
+
"status.waiting_addon": "Čeká se na opětovné spuštění aplikace (doplňku)…",
|
|
185
185
|
"errors.javascript": "Chyba JS: {message} @ {where}",
|
|
186
186
|
"errors.async": "Asynchronní chyba: {message}",
|
|
187
187
|
"errors.network": "Chyba sítě: {message}",
|
|
@@ -206,7 +206,7 @@
|
|
|
206
206
|
"common.minutes_short": "{count} min",
|
|
207
207
|
"common.bytes": "{count} bajtů",
|
|
208
208
|
"common.none": "(žádné)",
|
|
209
|
-
"notice.restart.addon": "⚠ Změny uloženy.
|
|
209
|
+
"notice.restart.addon": "⚠ Změny uloženy. Kliknutím na „Restartovat aplikaci (doplněk)“ je projevíte. Zakázané nástroje budou odstraněny ze seznamu nástrojů MCP při příštím spuštění. Poté obnovte seznam nástrojů ve svém AI klientovi; samotný restart aplikace neobnoví mezipaměť seznamu klienta.",
|
|
210
210
|
"notice.restart.embedded": "⚠ Změny uloženy. Klikněte na „Restartovat server HA-MCP“ pro opětovné načtení integrace v procesu. Poté obnovte seznam nástrojů MCP ve vašem AI klientovi.",
|
|
211
211
|
"notice.restart.sidecar": "⚠ Změny uloženy. Pro jejich projevení zcela ukončete a znovu otevřete svého klienta MCP. Zakázané nástroje budou při příštím spuštění odstraněny ze seznamu nástrojů MCP.",
|
|
212
212
|
"notice.restart.standalone": "⚠ Změny uloženy. Restartujte proces ha-mcp a poté obnovte seznam nástrojů MCP ve vašem AI klientovi.",
|
|
@@ -218,7 +218,7 @@
|
|
|
218
218
|
"tools.badges.read_only": "pouze pro čtení",
|
|
219
219
|
"tools.badges.writes": "zapisuje",
|
|
220
220
|
"tools.badges.deletes": "maže",
|
|
221
|
-
"tools.notes.gated_disabled": "Zakázáno. Zapněte {setting}
|
|
221
|
+
"tools.notes.gated_disabled": "Zakázáno. Zapněte {setting} – přepínač nástroje pro úpravu pravidel se nachází na kartě Tool Security Policies – a poté restartujte aplikaci (doplněk).",
|
|
222
222
|
"tools.notes.beta_disabled": "Beta. Nastavte {setting} v konfiguraci vývojové aplikace (doplňku) nebo odpovídající proměnné prostředí (viz docs/beta.md).",
|
|
223
223
|
"tools.notes.env_pinned": "Připnuto proměnnou {variable}. Zrušte nastavení proměnné prostředí pro úpravu zde.",
|
|
224
224
|
"tools.notes.bps_locked": "Uzamčeno, když je zapnut režim přísných osvědčených postupů. Nejprve vypněte toto nastavení, abyste tento nástroj zakázali.",
|
|
@@ -233,7 +233,7 @@
|
|
|
233
233
|
"tools.states.enabled": "povoleno",
|
|
234
234
|
"tools.states.pinned": "připnuto",
|
|
235
235
|
"tools.states.security_gated": "zabezpečeno",
|
|
236
|
-
"tools.security.enable_first": "Nejprve povolte
|
|
236
|
+
"tools.security.enable_first": "Nejprve povolte Tool Security Policies v nastavení serveru.",
|
|
237
237
|
"tools.summary.total": "{count} celkem",
|
|
238
238
|
"tools.summary.enabled": "{count} povoleno",
|
|
239
239
|
"tools.summary.pinned": "{count} připnuto",
|
|
@@ -292,9 +292,9 @@
|
|
|
292
292
|
"origins.env_locked": "Nastaveno přes proměnnou prostředí; zrušte ji pro úpravy zde.",
|
|
293
293
|
"origins.addon_synced": "Synchronizováno s kartou Konfigurace aplikace (doplňku). Po uložení je vyžadován restart.",
|
|
294
294
|
"origins.env_var_unset": "Nastaveno přes proměnnou prostředí {variable}; zrušte ji pro úpravy zde.",
|
|
295
|
-
"origins.beta_legacy_bridge": "Automaticky povoleno v režimu
|
|
296
|
-
"origins.addon_runtime": "Nastaveno
|
|
297
|
-
"origins.display_only": "Pouze zobrazení. Upravte pomocí proměnné prostředí nebo nastavení aplikace (
|
|
295
|
+
"origins.beta_legacy_bridge": "Automaticky povoleno v starším režimu aplikace (doplňku). Pro převzetí kontroly nastavte <code>enable_beta_features</code> explicitně v konfiguraci. (env: {variable})",
|
|
296
|
+
"origins.addon_runtime": "Nastaveno v běhovém prostředí aplikace (doplňku) spravovaném nástrojem Supervisor; zde nelze změnit. (env: {variable})",
|
|
297
|
+
"origins.display_only": "Pouze pro zobrazení. Upravte pomocí proměnné prostředí nebo nastavení aplikace (doplněku).",
|
|
298
298
|
"features.errors.network": "Příznaky funkcí nedostupné (chyba sítě při přístupu k /api/settings/features).",
|
|
299
299
|
"features.errors.http": "Příznaky funkcí nedostupné (HTTP {status}).",
|
|
300
300
|
"features.errors.json": "Odpověď příznaků funkcí nebyla platný JSON.",
|
|
@@ -304,12 +304,12 @@
|
|
|
304
304
|
"advanced.sidecar.stdio_only": "Dostupné pouze v režimu stdio. Tento HTTP server nemá žádný sidecar uživatelského rozhraní nastavení k připnutí.",
|
|
305
305
|
"advanced.enable_dev_mode.confirm": "⚠ Povolit režim vývojáře?\n\nPo restartu budou skryté vývojářské nástroje zpřístupněny připojeným AI agentům. Povolte pouze pro vývoj a testování.",
|
|
306
306
|
"advanced.dev_tools_security_policy_access.confirm": "⚠ Povolit vývojářským nástrojům měnit bezpečnostní zásady?\n\nZatímco je režim vývojáře zapnutý, připojení AI agenti budou moci přepisovat bezpečnostní zásady nástrojů, přidávat nebo odebírat brány schválení pro jednotlivé nástroje a schvalovat nebo zamítat čekající schválení – včetně jejich vlastních řízených volání. Povolte pouze při testování zásad.",
|
|
307
|
-
"advanced.code_mode_saved_tools_path.addon_locked": "Pevně
|
|
307
|
+
"advanced.code_mode_saved_tools_path.addon_locked": "Pevně nastaveno na <code>/data/saved_tools.json</code> v režimu aplikace (doplněku), aby uložené nástroje přežily aktualizace.",
|
|
308
308
|
"advanced.code_mode_saved_tools_path.blank_warning": "Pokud je prázdné, vlastní nástroje jsou uchovávány pouze v paměti a ztraceny po restartu.",
|
|
309
309
|
"policies.errors.conflict": "{operation} selhalo: zásada byla upravena na jiné kartě nebo v jiné relaci. Znovu načtěte a znovu použijte své změny.",
|
|
310
310
|
"policies.errors.load": "Nepodařilo se načíst zásadu: {status}",
|
|
311
311
|
"policies.errors.reach_server": "Nepodařilo se dosáhnout serveru: {message}",
|
|
312
|
-
"policies.errors.corrupt_suffix": " (tool_policy.json se zdá být poškozený; upravte nebo smažte
|
|
312
|
+
"policies.errors.corrupt_suffix": " (soubor tool_policy.json se zdá být poškozený; upravte jej nebo smažte v datovém adresáři serveru)",
|
|
313
313
|
"policies.errors.load_detail": "Nepodařilo se načíst zásadu: {detail}",
|
|
314
314
|
"policies.errors.update_tool": "Nepodařilo se aktualizovat bezpečnostní zásadu nástroje: {message}",
|
|
315
315
|
"policies.errors.remove_rule": "Nepodařilo se odstranit pravidlo: {message}",
|
|
@@ -365,8 +365,8 @@
|
|
|
365
365
|
"policies.editor.validation.empty_list": "prázdný seznam pro op={operator}",
|
|
366
366
|
"policies.editor.validation.argument_required": "argument je vyžadován",
|
|
367
367
|
"policies.pending.offline": "Ztracen kontakt se serverem ({message}). Opakuji pokus.",
|
|
368
|
-
"policies.pending.disabled": "
|
|
369
|
-
"policies.pending.unavailable": "
|
|
368
|
+
"policies.pending.disabled": "Zásady zabezpečení nástrojů jsou vypnuté. Zapněte je a restartujte HA-MCP pro aktivaci filtrování.",
|
|
369
|
+
"policies.pending.unavailable": "Schvalování v reálném čase není k dispozici. Zkontrolujte protokol HA-MCP.",
|
|
370
370
|
"policies.pending.expires": "Vyprší: {time}",
|
|
371
371
|
"policies.pending.already_decided": "Toto schválení již bylo {decision}, pravděpodobně z jiné karty nebo relace.",
|
|
372
372
|
"policies.pending.decision.approved": "schváleno",
|
|
@@ -374,11 +374,11 @@
|
|
|
374
374
|
"policies.pending.invalid_token": "Tento schvalovací token již není platný (již spotřebován nebo vypršel).",
|
|
375
375
|
"policies.pending.action_failed": "Akce schválení selhala: {detail}",
|
|
376
376
|
"visibility.errors.reach_server": "Nepodařilo se dosáhnout serveru: {message}",
|
|
377
|
-
"visibility.errors.corrupt_suffix": " (entity_visibility.json se zdá být poškozený; upravte nebo smažte
|
|
377
|
+
"visibility.errors.corrupt_suffix": " (soubor entity_visibility.json se zdá být poškozený; upravte jej nebo smažte v datovém adresáři serveru)",
|
|
378
378
|
"visibility.errors.load_detail": "Nepodařilo se načíst konfiguraci viditelnosti: {detail}",
|
|
379
379
|
"visibility.errors.conflict": "Konfigurace byla změněna na jiné kartě nebo v jiné relaci. Znovu načtěte stránku a poté znovu použijte své změny.",
|
|
380
380
|
"advanced.homeassistant_url.label": "URL adresa Home Assistant",
|
|
381
|
-
"advanced.homeassistant_url.help": "Pouze zobrazení.
|
|
381
|
+
"advanced.homeassistant_url.help": "Pouze pro zobrazení. Nastavuje se přes HOMEASSISTANT_URL nebo je spravováno aplikací (doplněkem).",
|
|
382
382
|
"advanced.homeassistant_token.label": "Token Home Assistant",
|
|
383
383
|
"advanced.homeassistant_token.help": "Pouze zobrazení. Nastaveno přes HOMEASSISTANT_TOKEN. Zde maskováno z bezpečnostních důvodů.",
|
|
384
384
|
"advanced.timeout.label": "Časový limit požadavku HA (s)",
|
|
@@ -462,8 +462,8 @@
|
|
|
462
462
|
"addon.pinned_tools.name": "Připnuté nástroje (oddělené čárkami)",
|
|
463
463
|
"addon.pinned_tools.description": "Nástroje zde uvedené jsou uzamčeny jako připnuté — zobrazují se v horní části karty Nástroje a nelze je odepnout z webového uživatelského rozhraní Nastavení, aniž byste nejprve zrušili toto nastavení. Užitečné v kombinaci s vyhledáváním nástrojů. Názvy nástrojů oddělené čárkami.",
|
|
464
464
|
"addon.verify_ssl.name": "Ověřit certifikát TLS",
|
|
465
|
-
"addon.verify_ssl.description": "
|
|
466
|
-
"addon_stable.enable_tool_search.description": "
|
|
465
|
+
"addon.verify_ssl.description": "Ověřit TLS certifikát serveru Home Assistant. Aplikace (doplněk) se připojuje přes proxy Supervisor, takže to obvykle nemá žádný vliv a mělo by to zůstat zapnuté. Zakazujte pouze v případě, že jste přenastavili aplikaci (doplněk) tak, aby komunikovala s HA přes veřejný HTTPS hostname s The self-signed certifikátem nebo neshodou hostname. Vypnutí oslabuje zabezpečení přenosu – nechte zapnuté, pokud víte, že to potřebujete. Vyžaduje restart, aby se projevilo.",
|
|
466
|
+
"addon_stable.enable_tool_search.description": "Nahradit úplný katalog nástrojů vyhledáváním. Snižuje klidový kontext přibližně o 90 %, na asi 5 tisíc tokenů. ⚠️ NEZAPÍNEJTE toto v klientech s vlastním vestavěným vyhledáváním nástrojů / odloženými nástroji (claude.ai, Claude Desktop, Claude Code) – obě vrstvy vyhledávání se střetávají a vestavěné vyhledávání nástrojů v klientovi je zde lepší volbou; nechte to vypnuté. Zda jsou nástroje odloženy, závisí na kombinaci vašeho klienta a modelu: použijte toto, když vaše nastavení načítá celý katalog předem – modely bez nativních odložených nástrojů (např. Gemini, lokální modely kompatibilní s OpenAI, Claude Haiku), klienti, kteří vkládají všechna schémata nástrojů bez ohledu na model (např. GitHub Copilot CLI), nebo menší kontextová okna. Některé modely Codex a ChatGPT také obsahují odložené nástroje – ověřte si funkce přímo u svého klienta/modelu, abyste to nenechávali zbytečně zapnuté. Nástroje se vyhledávají přes ha_search_tools a spouštějí se přes kategorizované proxy (read/write/delete). Vyžaduje restart aplikace (doplněku), aby se projevila změna – poté znovu připojte nebo obnovte MCP server ve svém AI klientovi, aby se znovu načetl seznam nástrojů. Samotný restart aplikace (doplněku) NEAKTUALIZUJE mezipaměť seznamu nástrojů klienta; toto platí po změně jakéhokoli nastavení zde."
|
|
467
467
|
},
|
|
468
468
|
"tools": {
|
|
469
469
|
"ha_bulk_control": {
|
|
@@ -618,9 +618,9 @@
|
|
|
618
618
|
"title": "Vyhodnotit šablonu",
|
|
619
619
|
"description": "Vyhodnotit šablony Jinja2 pomocí šablonovacího enginu Home Assistant."
|
|
620
620
|
},
|
|
621
|
-
"
|
|
622
|
-
"title": "Získat doplňky",
|
|
623
|
-
"description": "Získat
|
|
621
|
+
"ha_get_app": {
|
|
622
|
+
"title": "Získat aplikace (doplňky)",
|
|
623
|
+
"description": "Získat aplikace Home Assistant (dříve známé jako doplňky a tento nástroj jako ha_get_addon) – vypsat nainstalované, dostupné nebo získat d"
|
|
624
624
|
},
|
|
625
625
|
"ha_get_automation_traces": {
|
|
626
626
|
"title": "Získat trasování automatizací",
|
|
@@ -706,9 +706,9 @@
|
|
|
706
706
|
"title": "Vypsat dostupné služby",
|
|
707
707
|
"description": "Seznam dostupných služeb Home Assistant s volitelným stránkováním a řízením detailů."
|
|
708
708
|
},
|
|
709
|
-
"
|
|
710
|
-
"title": "Spravovat doplněk",
|
|
711
|
-
"description": "Spravovat
|
|
709
|
+
"ha_manage_app": {
|
|
710
|
+
"title": "Spravovat aplikaci (doplněk)",
|
|
711
|
+
"description": "Spravovat aplikaci Home Assistant (dříve známou jako doplněk a tento nástroj jako ha_manage_addon) – aktualizovat její konfiguraci o"
|
|
712
712
|
},
|
|
713
713
|
"ha_manage_backup": {
|
|
714
714
|
"title": "Spravovat zálohy",
|
|
@@ -820,7 +820,7 @@
|
|
|
820
820
|
}
|
|
821
821
|
},
|
|
822
822
|
"tool_groups": {
|
|
823
|
-
"
|
|
823
|
+
"Apps (add-ons)": "Aplikace (doplňky)",
|
|
824
824
|
"Areas & Floors": "Oblasti a patra",
|
|
825
825
|
"Assist": "Asistent",
|
|
826
826
|
"Automations": "Automatizace",
|