ha-mcp-dev 8.3.0.dev2374__tar.gz → 8.3.0.dev2377__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.3.0.dev2374/src/ha_mcp_dev.egg-info → ha_mcp_dev-8.3.0.dev2377}/PKG-INFO +1 -1
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/pyproject.toml +1 -1
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/visibility/enforcement.py +22 -1
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377/src/ha_mcp_dev.egg-info}/PKG-INFO +1 -1
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/LICENSE +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/MANIFEST.in +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/README.md +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/setup.cfg +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/__init__.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/__main__.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_pypi_marker +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_rich_compat.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/__init__.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/requirements.txt +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/client.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/server.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/version.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_version.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/auth/__init__.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/auth/consent_form.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/auth/oidc_compat.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/auth/provider.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/backup_manager.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/browser_landing.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/client/__init__.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/client/rest_client.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/client/supervisor_client.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/client/websocket_client.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/client/websocket_listener.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/config.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/errors.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/hacs_auto_refresh.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/llm_exposure.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/policy/__init__.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/policy/approval_queue.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/policy/editing.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/policy/evaluator.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/policy/handlers.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/policy/middleware.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/policy/model.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/policy/persistence.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/policy/value_sources.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/py.typed +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/read_only.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/redaction.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/renamed_tools.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/resources/skills-vendor/.github/pull_request_template.md +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/evals/evals.json +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/server.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/settings_ui/__init__.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/settings_ui/_i18n.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/settings_ui/_persistence.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/settings_ui/_theme.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/settings_ui/locales/README.md +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/settings_ui/locales/de.json +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/settings_ui/locales/en.json +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/settings_ui/locales/es.json +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/settings_ui/locales/it.json +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/settings_ui/settings.css +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/settings_ui/settings.html +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/settings_ui/settings.js +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/smoke_test.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/strict_bps.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/__init__.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/auto_backup.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/backup.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/best_practice_checker.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/best_practice_result.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/best_practice_variables.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/component_api.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/component_config_entries.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/component_config_reads.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/component_devices.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/component_registries.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/config_entry_flow.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/config_entry_identity.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/device_control.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/error_log_parsing.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/hacs_registration.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/helpers.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/radio/__init__.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/radio/base.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/radio/matter.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/radio/thread.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/radio/zigbee.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/radio/zwave.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/reference_validator.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/registry.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/smart_search/_base.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/smart_search/_config.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/tools_addons.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/tools_areas.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/tools_blueprints.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/tools_bug_report.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/tools_calendar.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/tools_camera.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/tools_categories.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/tools_code.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/tools_config_automations.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/tools_dev.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/tools_energy.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/tools_entities.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/tools_filesystem.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/tools_groups.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/tools_hacs.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/tools_history.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/tools_integrations.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/tools_labels.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/tools_radio.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/tools_registry.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/tools_resources.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/tools_search.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/tools_security_policy.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/tools_service.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/tools_services.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/tools_system.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/tools_themes.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/tools_todo.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/tools_traces.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/tools_updates.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/tools_utility.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/tools_zones.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/util_helpers.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/validation_middleware.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/transforms/__init__.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/transforms/categorized_search.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/transport_security.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/update_check.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/utils/__init__.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/utils/config_hash.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/utils/config_write_lock.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/utils/data_paths.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/utils/domain_handlers.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/utils/fuzzy_search.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/utils/operation_manager.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/utils/python_sandbox.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/utils/skill_loader.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/utils/usage_logger.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/visibility/__init__.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/visibility/model.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/visibility/persistence.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/visibility/resolver.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp_dev.egg-info/SOURCES.txt +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/tests/__init__.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/tests/test_constants.py +0 -0
- {ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/tests/test_env_manager.py +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "ha-mcp-dev"
|
|
7
|
-
version = "8.3.0.
|
|
7
|
+
version = "8.3.0.dev2377"
|
|
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
|
|
@@ -49,6 +49,7 @@ import logging
|
|
|
49
49
|
import re
|
|
50
50
|
import time
|
|
51
51
|
from collections.abc import Callable
|
|
52
|
+
from contextvars import ContextVar
|
|
52
53
|
from typing import TYPE_CHECKING, Any, NoReturn
|
|
53
54
|
|
|
54
55
|
from fastmcp.exceptions import ToolError
|
|
@@ -72,6 +73,10 @@ if TYPE_CHECKING:
|
|
|
72
73
|
|
|
73
74
|
logger = logging.getLogger(__name__)
|
|
74
75
|
|
|
76
|
+
_config_load_warning_emitted: ContextVar[bool | None] = ContextVar(
|
|
77
|
+
"visibility_config_load_warning_emitted", default=None
|
|
78
|
+
)
|
|
79
|
+
|
|
75
80
|
# The resolved hidden set is cached with a short TTL so a burst of tool calls
|
|
76
81
|
# does not re-fetch the registry each time; a config edit invalidates it sooner
|
|
77
82
|
# (the cache is keyed on the hide dimensions), so the ~30s window only applies to
|
|
@@ -353,6 +358,10 @@ class _VisibilityEnforcementBase(Middleware):
|
|
|
353
358
|
loaded successfully — for the common non-enforce install that preserves
|
|
354
359
|
availability, and for an enforce install it preserves the boundary.
|
|
355
360
|
With no good load ever, fail CLOSED like PolicyMiddleware does.
|
|
361
|
+
|
|
362
|
+
Each half diagnoses a distinct config-load failure. A context-local
|
|
363
|
+
marker suppresses only the second traceback when both halves fail during
|
|
364
|
+
the same call.
|
|
356
365
|
"""
|
|
357
366
|
config: VisibilityConfig | None
|
|
358
367
|
try:
|
|
@@ -369,12 +378,15 @@ class _VisibilityEnforcementBase(Middleware):
|
|
|
369
378
|
)
|
|
370
379
|
else:
|
|
371
380
|
outcome = "failing closed"
|
|
372
|
-
|
|
381
|
+
warning_emitted = _config_load_warning_emitted.get()
|
|
382
|
+
if warning_emitted is not True:
|
|
373
383
|
logger.warning(
|
|
374
384
|
"visibility enforce: config load failed; %s",
|
|
375
385
|
outcome,
|
|
376
386
|
exc_info=True,
|
|
377
387
|
)
|
|
388
|
+
if warning_emitted is not None:
|
|
389
|
+
_config_load_warning_emitted.set(True)
|
|
378
390
|
# ``ha_report_issue`` is an unconditional diagnostic escape hatch while
|
|
379
391
|
# the toggle is off, not only a registry-failure fallback. A missing or
|
|
380
392
|
# corrupt first config load follows that safe default; a last-known-good
|
|
@@ -423,6 +435,15 @@ class VisibilityInboundEnforcement(_VisibilityEnforcementBase):
|
|
|
423
435
|
|
|
424
436
|
async def on_call_tool(
|
|
425
437
|
self, context: MiddlewareContext, call_next: CallNext
|
|
438
|
+
) -> Any:
|
|
439
|
+
token = _config_load_warning_emitted.set(False)
|
|
440
|
+
try:
|
|
441
|
+
return await self._on_call_tool(context, call_next)
|
|
442
|
+
finally:
|
|
443
|
+
_config_load_warning_emitted.reset(token)
|
|
444
|
+
|
|
445
|
+
async def _on_call_tool(
|
|
446
|
+
self, context: MiddlewareContext, call_next: CallNext
|
|
426
447
|
) -> Any:
|
|
427
448
|
name = context.message.name
|
|
428
449
|
args = context.message.arguments or {}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/VENDORED
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/__init__.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/__main__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/client.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/connection.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/exceptions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/frames.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/headers.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/http11.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/imports.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/legacy/auth.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/legacy/client.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/legacy/http.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/legacy/server.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/protocol.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/proxy.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/py.typed
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/server.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/streams.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/sync/__init__.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/sync/client.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/sync/messages.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/sync/router.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/sync/server.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/sync/utils.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/trio/__init__.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/trio/client.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/trio/messages.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/trio/router.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/trio/server.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/trio/utils.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/typing.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/utils.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/_vendor/websockets/version.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/client/supervisor_client.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/client/websocket_listener.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/dashboard_screenshot/__init__.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/dashboard_screenshot/capture.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/dashboard_screenshot/content.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/dashboard_screenshot/paths.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/dashboard_screenshot/provision.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/dashboard_screenshot/theme_guard.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/resources/skills-vendor/AGENTS.md
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/resources/skills-vendor/CLAUDE.md
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/resources/skills-vendor/LICENSE
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/resources/skills-vendor/README.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/settings_ui/_handlers_advanced.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/settings_ui/_handlers_backups.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/settings_ui/_handlers_fs.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/settings_ui/_handlers_server.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/settings_ui/_handlers_theme.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/settings_ui/_handlers_tools.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/settings_ui/_persistence.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/settings_ui/locales/README.md
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/settings_ui/locales/cs.json
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/settings_ui/locales/de.json
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/settings_ui/locales/en.json
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/settings_ui/locales/eo.json
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/settings_ui/locales/es.json
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/settings_ui/locales/fr.json
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/settings_ui/locales/it.json
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/settings_ui/locales/nl.json
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/settings_ui/locales/pl.json
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/settings_ui/locales/ru.json
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/settings_ui/locales/sv.json
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/settings_ui/locales/zh-Hans.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/best_practice_checker.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/best_practice_result.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/best_practice_variables.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/component_config_entries.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/component_config_reads.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/component_registries.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/component_registry_lookup.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/config_entry_flow_form.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/config_entry_flow_menu.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/config_entry_flow_walker.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/config_entry_identity.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/config_entry_reconfigure.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/config_entry_reload_watch.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/integration_reconfigure.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.3.0.dev2374 → ha_mcp_dev-8.3.0.dev2377}/src/ha_mcp/tools/reference_validator.py
RENAMED
|
File without changes
|