ha-mcp-dev 7.12.3.dev1865__tar.gz → 7.12.3.dev1867__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ha_mcp_dev-7.12.3.dev1865/src/ha_mcp_dev.egg-info → ha_mcp_dev-7.12.3.dev1867}/PKG-INFO +1 -1
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/pyproject.toml +1 -1
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/config_entry_flow.py +51 -13
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867/src/ha_mcp_dev.egg-info}/PKG-INFO +1 -1
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/LICENSE +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/MANIFEST.in +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/README.md +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/setup.cfg +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/__init__.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/__main__.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/_pypi_marker +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/_version.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/auth/__init__.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/auth/consent_form.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/auth/provider.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/backup_manager.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/browser_landing.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/client/__init__.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/client/rest_client.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/client/supervisor_client.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/client/websocket_client.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/client/websocket_listener.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/config.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/errors.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/llm_exposure.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/policy/__init__.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/policy/approval_queue.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/policy/evaluator.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/policy/handlers.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/policy/middleware.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/policy/model.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/policy/persistence.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/policy/value_sources.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/py.typed +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/read_only.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/.github/pull_request_template.md +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/evals/evals.json +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/server.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/settings_ui/__init__.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/settings_ui/settings.css +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/settings_ui/settings.html +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/settings_ui/settings.js +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/smoke_test.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/__init__.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/auto_backup.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/backup.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/best_practice_checker.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/device_control.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/enhanced.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/helpers.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/radio/__init__.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/radio/base.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/radio/matter.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/radio/thread.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/radio/zigbee.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/radio/zwave.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/reference_validator.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/registry.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/smart_search/_base.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/smart_search/_config.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_addons.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_areas.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_blueprints.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_bug_report.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_calendar.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_camera.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_categories.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_code.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_config_automations.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_dev.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_energy.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_entities.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_filesystem.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_groups.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_hacs.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_history.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_integrations.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_labels.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_mcp_component.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_radio.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_registry.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_resources.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_search.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_service.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_services.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_system.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_themes.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_todo.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_traces.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_updates.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_utility.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_zones.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/util_helpers.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/validation_middleware.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/transforms/__init__.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/transforms/categorized_search.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/transport_security.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/update_check.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/utils/__init__.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/utils/config_hash.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/utils/data_paths.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/utils/domain_handlers.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/utils/fuzzy_search.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/utils/operation_manager.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/utils/python_sandbox.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/utils/skill_loader.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/utils/usage_logger.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/visibility/__init__.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/visibility/model.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/visibility/persistence.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/visibility/resolver.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp_dev.egg-info/SOURCES.txt +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/tests/__init__.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/tests/test_constants.py +0 -0
- {ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/tests/test_env_manager.py +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "ha-mcp-dev"
|
|
7
|
-
version = "7.12.3.
|
|
7
|
+
version = "7.12.3.dev1867"
|
|
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
|
{ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/config_entry_flow.py
RENAMED
|
@@ -165,6 +165,28 @@ def _record_ignored_section_keys(
|
|
|
165
165
|
)
|
|
166
166
|
|
|
167
167
|
|
|
168
|
+
def _ignored_keys_warnings(
|
|
169
|
+
ignored_config_keys: set[str], remaining_config: dict[str, Any]
|
|
170
|
+
) -> list[str]:
|
|
171
|
+
"""Build warnings for caller-supplied config keys no flow step consumed."""
|
|
172
|
+
warnings: list[str] = []
|
|
173
|
+
ignored = ignored_config_keys | {
|
|
174
|
+
key for key in remaining_config if key not in _MENU_SELECTION_KEYS
|
|
175
|
+
}
|
|
176
|
+
if ignored:
|
|
177
|
+
warnings.append(
|
|
178
|
+
"Ignored config keys not declared by the Home Assistant flow "
|
|
179
|
+
f"schema: {', '.join(sorted(ignored))}"
|
|
180
|
+
)
|
|
181
|
+
leftover_menu_keys = _MENU_SELECTION_KEYS & remaining_config.keys()
|
|
182
|
+
if leftover_menu_keys:
|
|
183
|
+
warnings.append(
|
|
184
|
+
"Ignored menu selection key(s) with no matching menu step: "
|
|
185
|
+
f"{', '.join(sorted(leftover_menu_keys))}"
|
|
186
|
+
)
|
|
187
|
+
return warnings
|
|
188
|
+
|
|
189
|
+
|
|
168
190
|
def _consume_form_schema(
|
|
169
191
|
data_schema: list[Any],
|
|
170
192
|
remaining_config: dict[str, Any],
|
|
@@ -643,15 +665,10 @@ async def _handle_flow_steps(
|
|
|
643
665
|
result_type = current_step.get("type")
|
|
644
666
|
|
|
645
667
|
if result_type == _FlowType.CREATE_ENTRY:
|
|
646
|
-
ignored_config_keys.update(
|
|
647
|
-
key for key in remaining_config if key not in _MENU_SELECTION_KEYS
|
|
648
|
-
)
|
|
649
668
|
response: dict[str, Any] = {"success": True, "entry": current_step}
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
f"schema: {', '.join(sorted(ignored_config_keys))}"
|
|
654
|
-
]
|
|
669
|
+
warnings = _ignored_keys_warnings(ignored_config_keys, remaining_config)
|
|
670
|
+
if warnings:
|
|
671
|
+
response["warnings"] = warnings
|
|
655
672
|
return response
|
|
656
673
|
|
|
657
674
|
if result_type == _FlowType.ABORT:
|
|
@@ -731,30 +748,43 @@ async def _handle_config_subentry_flow_steps(
|
|
|
731
748
|
*,
|
|
732
749
|
is_reconfigure: bool,
|
|
733
750
|
) -> dict[str, Any]:
|
|
734
|
-
"""Walk a config subentry flow and accept HA's reconfigure-success abort.
|
|
751
|
+
"""Walk a config subentry flow and accept HA's reconfigure-success abort.
|
|
752
|
+
|
|
753
|
+
Successful results include ``warnings`` when caller-supplied config keys
|
|
754
|
+
were not declared by any flow step.
|
|
755
|
+
"""
|
|
735
756
|
remaining_config = dict(config)
|
|
736
757
|
current_step = initial_step
|
|
737
758
|
last_menu_choice: str | None = None
|
|
759
|
+
ignored_config_keys: set[str] = set()
|
|
738
760
|
max_steps = 10
|
|
739
761
|
|
|
740
762
|
for step_num in range(max_steps):
|
|
741
763
|
result_type = current_step.get("type")
|
|
742
764
|
|
|
743
765
|
if result_type == _FlowType.CREATE_ENTRY:
|
|
744
|
-
|
|
766
|
+
response: dict[str, Any] = {
|
|
745
767
|
"success": True,
|
|
746
768
|
"operation": "created",
|
|
747
769
|
"flow_result": current_step,
|
|
748
770
|
}
|
|
771
|
+
warnings = _ignored_keys_warnings(ignored_config_keys, remaining_config)
|
|
772
|
+
if warnings:
|
|
773
|
+
response["warnings"] = warnings
|
|
774
|
+
return response
|
|
749
775
|
|
|
750
776
|
if result_type == _FlowType.ABORT:
|
|
751
777
|
reason = current_step.get("reason")
|
|
752
778
|
if is_reconfigure and reason in _RECONFIGURE_SUCCESS_REASONS:
|
|
753
|
-
|
|
779
|
+
response = {
|
|
754
780
|
"success": True,
|
|
755
781
|
"operation": "reconfigured",
|
|
756
782
|
"flow_result": current_step,
|
|
757
783
|
}
|
|
784
|
+
warnings = _ignored_keys_warnings(ignored_config_keys, remaining_config)
|
|
785
|
+
if warnings:
|
|
786
|
+
response["warnings"] = warnings
|
|
787
|
+
return response
|
|
758
788
|
raise_tool_error(
|
|
759
789
|
create_error_response(
|
|
760
790
|
ErrorCode.SERVICE_CALL_FAILED,
|
|
@@ -784,7 +814,12 @@ async def _handle_config_subentry_flow_steps(
|
|
|
784
814
|
continue
|
|
785
815
|
|
|
786
816
|
if result_type == _FlowType.FORM:
|
|
787
|
-
form_data = _handle_form_step(
|
|
817
|
+
form_data = _handle_form_step(
|
|
818
|
+
flow_id,
|
|
819
|
+
current_step,
|
|
820
|
+
remaining_config,
|
|
821
|
+
ignored_config_keys,
|
|
822
|
+
)
|
|
788
823
|
logger.debug(
|
|
789
824
|
"Config subentry flow step %s: form submit (step_id=%s, keys=%s)",
|
|
790
825
|
step_num,
|
|
@@ -895,7 +930,7 @@ async def set_config_subentry(
|
|
|
895
930
|
)
|
|
896
931
|
raise
|
|
897
932
|
|
|
898
|
-
|
|
933
|
+
response = {
|
|
899
934
|
"success": True,
|
|
900
935
|
"entry_id": entry_id,
|
|
901
936
|
"subentry_type": subentry_type,
|
|
@@ -904,6 +939,9 @@ async def set_config_subentry(
|
|
|
904
939
|
"flow_result": result["flow_result"],
|
|
905
940
|
"message": f"Config subentry {result['operation']} successfully",
|
|
906
941
|
}
|
|
942
|
+
if result.get("warnings"):
|
|
943
|
+
response["warnings"] = result["warnings"]
|
|
944
|
+
return response
|
|
907
945
|
|
|
908
946
|
|
|
909
947
|
async def get_user_step_field_names(client: Any, helper_type: str) -> set[str] | None:
|
|
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-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/client/supervisor_client.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/client/websocket_client.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/client/websocket_listener.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/dashboard_screenshot/__init__.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/dashboard_screenshot/capture.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/dashboard_screenshot/provision.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
|
{ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/AGENTS.md
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/CLAUDE.md
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/resources/skills-vendor/LICENSE
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/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
|
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/settings_ui/settings.html
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/stdio_settings_sidecar.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/best_practice_checker.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-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/reference_validator.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/smart_search/__init__.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/smart_search/_base.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/smart_search/_config.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/smart_search/_deep.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/smart_search/_entities.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/smart_search/_fetch.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/smart_search/_overview.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/smart_search/_scenes.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/smart_search/_scoring.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_blueprints.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_bug_report.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_categories.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_config_automations.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_config_dashboards.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_config_helpers.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_config_scenes.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_config_scripts.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_filesystem.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_integrations.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_mcp_component.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
|
{ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_voice_assistant.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/tools_yaml_config.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/tools/validation_middleware.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/transforms/categorized_search.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/transforms/lite_docstrings.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
|
{ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/utils/kill_signal_diagnostics.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/utils/operation_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp/visibility/persistence.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp_dev.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp_dev.egg-info/entry_points.txt
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp_dev.egg-info/requires.txt
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1865 → ha_mcp_dev-7.12.3.dev1867}/src/ha_mcp_dev.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|