ha-mcp-dev 8.1.1.dev2296__tar.gz → 8.2.0.dev2305__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.1.1.dev2296/src/ha_mcp_dev.egg-info → ha_mcp_dev-8.2.0.dev2305}/PKG-INFO +2 -2
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/pyproject.toml +2 -2
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/__init__.py +4 -0
- ha_mcp_dev-8.2.0.dev2305/src/ha_mcp/_rich_compat.py +109 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305/src/ha_mcp_dev.egg-info}/PKG-INFO +2 -2
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp_dev.egg-info/SOURCES.txt +1 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp_dev.egg-info/requires.txt +1 -1
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/LICENSE +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/MANIFEST.in +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/README.md +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/setup.cfg +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/__main__.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_pypi_marker +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/__init__.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/requirements.txt +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/client.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/server.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/version.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_version.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/auth/__init__.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/auth/consent_form.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/auth/provider.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/backup_manager.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/browser_landing.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/client/__init__.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/client/rest_client.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/client/supervisor_client.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/client/websocket_client.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/client/websocket_listener.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/config.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/errors.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/hacs_auto_refresh.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/llm_exposure.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/policy/__init__.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/policy/approval_queue.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/policy/editing.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/policy/evaluator.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/policy/handlers.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/policy/middleware.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/policy/model.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/policy/persistence.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/policy/value_sources.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/py.typed +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/read_only.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/redaction.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/resources/skills-vendor/.github/pull_request_template.md +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/evals/evals.json +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/server.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/settings_ui/__init__.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/settings_ui/_i18n.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/settings_ui/_persistence.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/settings_ui/_theme.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/settings_ui/locales/README.md +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/settings_ui/locales/de.json +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/settings_ui/locales/en.json +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/settings_ui/locales/es.json +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/settings_ui/locales/it.json +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/settings_ui/settings.css +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/settings_ui/settings.html +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/settings_ui/settings.js +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/smoke_test.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/strict_bps.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/__init__.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/auto_backup.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/backup.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/best_practice_checker.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/best_practice_result.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/best_practice_variables.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/component_api.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/component_config_reads.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/component_devices.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/component_registries.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/config_entry_flow.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/device_control.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/hacs_registration.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/helpers.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/radio/__init__.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/radio/base.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/radio/matter.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/radio/thread.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/radio/zigbee.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/radio/zwave.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/reference_validator.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/registry.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/smart_search/_base.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/smart_search/_config.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/tools_addons.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/tools_areas.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/tools_blueprints.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/tools_bug_report.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/tools_calendar.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/tools_camera.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/tools_categories.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/tools_code.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/tools_config_automations.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/tools_dev.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/tools_energy.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/tools_entities.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/tools_filesystem.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/tools_groups.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/tools_hacs.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/tools_history.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/tools_integrations.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/tools_labels.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/tools_radio.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/tools_registry.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/tools_resources.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/tools_search.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/tools_security_policy.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/tools_service.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/tools_services.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/tools_system.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/tools_themes.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/tools_todo.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/tools_traces.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/tools_updates.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/tools_utility.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/tools_zones.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/util_helpers.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/validation_middleware.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/transforms/__init__.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/transforms/categorized_search.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/transport_security.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/update_check.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/utils/__init__.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/utils/config_hash.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/utils/config_write_lock.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/utils/data_paths.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/utils/domain_handlers.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/utils/fuzzy_search.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/utils/operation_manager.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/utils/python_sandbox.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/utils/skill_loader.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/utils/usage_logger.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/visibility/__init__.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/visibility/enforcement.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/visibility/model.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/visibility/persistence.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/visibility/resolver.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/tests/__init__.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/tests/test_constants.py +0 -0
- {ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/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.
|
|
3
|
+
Version: 8.2.0.dev2305
|
|
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
|
|
@@ -19,7 +19,7 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
|
19
19
|
Requires-Python: <3.15,>=3.13
|
|
20
20
|
Description-Content-Type: text/markdown
|
|
21
21
|
License-File: LICENSE
|
|
22
|
-
Requires-Dist: fastmcp==3.4.
|
|
22
|
+
Requires-Dist: fastmcp==3.4.6
|
|
23
23
|
Requires-Dist: httpx[socks]==0.28.1
|
|
24
24
|
Requires-Dist: pydantic==2.13.4
|
|
25
25
|
Requires-Dist: python-dotenv==1.2.2
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "ha-mcp-dev"
|
|
7
|
-
version = "8.
|
|
7
|
+
version = "8.2.0.dev2305"
|
|
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
|
|
@@ -28,7 +28,7 @@ classifiers = [
|
|
|
28
28
|
]
|
|
29
29
|
|
|
30
30
|
dependencies = [
|
|
31
|
-
"fastmcp==3.4.
|
|
31
|
+
"fastmcp==3.4.6",
|
|
32
32
|
"httpx[socks]==0.28.1",
|
|
33
33
|
"pydantic==2.13.4",
|
|
34
34
|
"python-dotenv==1.2.2",
|
|
@@ -5,6 +5,10 @@ A Model Context Protocol server that provides complete control over Home Assista
|
|
|
5
5
|
through REST API and WebSocket integration.
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
|
+
# Must be imported before anything that reaches fastmcp (``.auth`` below does),
|
|
9
|
+
# because fastmcp configures rich logging at import time and dies on a rich
|
|
10
|
+
# older than 13.9.4. Importing this module applies the shim. See #2186.
|
|
11
|
+
from . import _rich_compat as _rich_compat
|
|
8
12
|
from ._version import get_version
|
|
9
13
|
|
|
10
14
|
__version__ = get_version()
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"""Tolerate a ``rich`` older than fastmcp's logging setup expects (#2186).
|
|
2
|
+
|
|
3
|
+
``fastmcp/__init__.py`` calls ``configure_logging()`` at import time, which
|
|
4
|
+
builds a ``rich.logging.RichHandler`` with ``tracebacks_max_frames`` and
|
|
5
|
+
``tracebacks_suppress`` unconditionally — no version guard, no ``try``. Both
|
|
6
|
+
keywords require ``rich>=13.9.4`` (``fastmcp-slim``'s declared floor), so an
|
|
7
|
+
environment holding an older ``rich`` cannot ``import fastmcp`` at all::
|
|
8
|
+
|
|
9
|
+
TypeError: RichHandler.__init__() got an unexpected keyword argument
|
|
10
|
+
'tracebacks_max_frames'
|
|
11
|
+
|
|
12
|
+
Since ``ha_mcp/__init__.py`` imports ``.auth`` -> ``fastmcp``, that takes the
|
|
13
|
+
whole package down before any of our code runs. It is not hypothetical: the
|
|
14
|
+
official Home Assistant container ships ``rich 10.16.2`` (held below 11 by
|
|
15
|
+
``surepy``'s ``rich>=10.1.0,<11.0.0``) and ``rich`` is absent from HA's
|
|
16
|
+
``package_constraints.txt``, so whether installing ``ha-mcp`` pulls ``rich``
|
|
17
|
+
forward is left entirely to the resolver — it usually does, and when it does
|
|
18
|
+
not the integration cannot start.
|
|
19
|
+
|
|
20
|
+
The declared dependency floor is correct upstream and this module does not
|
|
21
|
+
second-guess it: it only intervenes when the *installed* ``RichHandler``
|
|
22
|
+
genuinely cannot accept a keyword, dropping the unsupported ones so logging
|
|
23
|
+
setup degrades instead of aborting the import. On ``rich>=13.9.4`` it is a
|
|
24
|
+
no-op. Handlers still attach and still render; such installs lose only
|
|
25
|
+
traceback frame-limiting and framework-frame suppression, which beats not
|
|
26
|
+
importing.
|
|
27
|
+
|
|
28
|
+
Remove this once the upstream fix is released and ha-mcp's floor excludes the
|
|
29
|
+
affected fastmcp versions.
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
from __future__ import annotations
|
|
33
|
+
|
|
34
|
+
import functools
|
|
35
|
+
import inspect
|
|
36
|
+
import logging
|
|
37
|
+
from typing import Any
|
|
38
|
+
|
|
39
|
+
logger = logging.getLogger(__name__)
|
|
40
|
+
|
|
41
|
+
# Marker set on our wrapper so repeated calls do not stack wrappers.
|
|
42
|
+
_PATCH_MARKER = "_ha_mcp_filters_unsupported_kwargs"
|
|
43
|
+
|
|
44
|
+
# Present only on rich>=13.9.4; its absence is what makes fastmcp's call fatal.
|
|
45
|
+
_PROBE_KWARG = "tracebacks_max_frames"
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def ensure_rich_handler_compat() -> bool:
|
|
49
|
+
"""Make ``RichHandler`` ignore keywords the installed ``rich`` lacks.
|
|
50
|
+
|
|
51
|
+
Returns ``True`` when a shim is in place (freshly applied or already
|
|
52
|
+
applied), ``False`` when none is needed or none could be applied — an
|
|
53
|
+
unimportable ``rich``, an uninspectable ``__init__``, or a signature that
|
|
54
|
+
already absorbs ``**kwargs``.
|
|
55
|
+
"""
|
|
56
|
+
try:
|
|
57
|
+
from rich.logging import RichHandler
|
|
58
|
+
except Exception: # pragma: no cover - rich absent or broken
|
|
59
|
+
# fastmcp depends on rich, so this means the import would fail anyway
|
|
60
|
+
# for reasons this shim cannot address.
|
|
61
|
+
logger.debug("rich.logging unavailable; skipping RichHandler shim")
|
|
62
|
+
return False
|
|
63
|
+
|
|
64
|
+
original_init = RichHandler.__init__
|
|
65
|
+
if getattr(original_init, _PATCH_MARKER, False):
|
|
66
|
+
return True
|
|
67
|
+
|
|
68
|
+
try:
|
|
69
|
+
parameters = inspect.signature(original_init).parameters
|
|
70
|
+
except (TypeError, ValueError): # pragma: no cover - exotic rich build
|
|
71
|
+
logger.debug("RichHandler.__init__ is not introspectable; skipping shim")
|
|
72
|
+
return False
|
|
73
|
+
|
|
74
|
+
if any(p.kind is inspect.Parameter.VAR_KEYWORD for p in parameters.values()):
|
|
75
|
+
# Already tolerant of anything fastmcp passes.
|
|
76
|
+
return False
|
|
77
|
+
|
|
78
|
+
if _PROBE_KWARG in parameters:
|
|
79
|
+
return False
|
|
80
|
+
|
|
81
|
+
supported = frozenset(parameters)
|
|
82
|
+
|
|
83
|
+
@functools.wraps(original_init)
|
|
84
|
+
def _init(self: Any, *args: Any, **kwargs: Any) -> Any:
|
|
85
|
+
dropped = kwargs.keys() - supported
|
|
86
|
+
if dropped:
|
|
87
|
+
logger.debug(
|
|
88
|
+
"Dropping RichHandler kwargs this rich does not accept: %s",
|
|
89
|
+
", ".join(sorted(dropped)),
|
|
90
|
+
)
|
|
91
|
+
return original_init(
|
|
92
|
+
self, *args, **{k: v for k, v in kwargs.items() if k in supported}
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
setattr(_init, _PATCH_MARKER, True)
|
|
96
|
+
RichHandler.__init__ = _init # type: ignore[method-assign]
|
|
97
|
+
|
|
98
|
+
logger.debug(
|
|
99
|
+
"Installed RichHandler compatibility shim: rich is older than "
|
|
100
|
+
"fastmcp expects, so tracebacks lose frame-limiting and "
|
|
101
|
+
"framework-frame suppression. Upgrade to rich>=13.9.4 to restore them."
|
|
102
|
+
)
|
|
103
|
+
return True
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
# Applied as an import side effect: ``ha_mcp/__init__.py`` imports this module
|
|
107
|
+
# ahead of anything that reaches fastmcp, and that is the only window in which
|
|
108
|
+
# the shim can do any good.
|
|
109
|
+
ensure_rich_handler_compat()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ha-mcp-dev
|
|
3
|
-
Version: 8.
|
|
3
|
+
Version: 8.2.0.dev2305
|
|
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
|
|
@@ -19,7 +19,7 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
|
19
19
|
Requires-Python: <3.15,>=3.13
|
|
20
20
|
Description-Content-Type: text/markdown
|
|
21
21
|
License-File: LICENSE
|
|
22
|
-
Requires-Dist: fastmcp==3.4.
|
|
22
|
+
Requires-Dist: fastmcp==3.4.6
|
|
23
23
|
Requires-Dist: httpx[socks]==0.28.1
|
|
24
24
|
Requires-Dist: pydantic==2.13.4
|
|
25
25
|
Requires-Dist: python-dotenv==1.2.2
|
|
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.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/VENDORED
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/__init__.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/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.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/client.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/connection.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/exceptions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/frames.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/headers.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/http11.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/imports.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/legacy/auth.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/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.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/legacy/http.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/legacy/server.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/protocol.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/proxy.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/py.typed
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/server.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/streams.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/sync/__init__.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/sync/client.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/sync/messages.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/sync/router.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/sync/server.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/sync/utils.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/trio/__init__.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/trio/client.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/trio/messages.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/trio/router.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/trio/server.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/trio/utils.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/typing.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/_vendor/websockets/utils.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/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
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/client/supervisor_client.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/client/websocket_listener.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/dashboard_screenshot/__init__.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/dashboard_screenshot/capture.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/dashboard_screenshot/content.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/dashboard_screenshot/paths.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/dashboard_screenshot/provision.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/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
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/resources/skills-vendor/AGENTS.md
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/resources/skills-vendor/CLAUDE.md
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/resources/skills-vendor/LICENSE
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/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.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/settings_ui/_handlers_advanced.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/settings_ui/_handlers_backups.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/settings_ui/_handlers_fs.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/settings_ui/_handlers_server.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/settings_ui/_handlers_theme.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/settings_ui/_handlers_tools.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/settings_ui/_persistence.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/settings_ui/locales/README.md
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/settings_ui/locales/de.json
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/settings_ui/locales/en.json
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/settings_ui/locales/es.json
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/settings_ui/locales/fr.json
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/settings_ui/locales/it.json
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/settings_ui/locales/nl.json
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/settings_ui/locales/pl.json
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/settings_ui/locales/ru.json
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/settings_ui/locales/sv.json
RENAMED
|
File without changes
|
{ha_mcp_dev-8.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/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.1.1.dev2296 → ha_mcp_dev-8.2.0.dev2305}/src/ha_mcp/tools/best_practice_checker.py
RENAMED
|
File without changes
|