ha-mcp-dev 7.12.3.dev1894__tar.gz → 7.12.3.dev1895__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.dev1894/src/ha_mcp_dev.egg-info → ha_mcp_dev-7.12.3.dev1895}/PKG-INFO +1 -1
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/pyproject.toml +1 -1
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_dev.py +54 -5
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895/src/ha_mcp_dev.egg-info}/PKG-INFO +1 -1
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/LICENSE +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/MANIFEST.in +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/README.md +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/setup.cfg +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/__init__.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/__main__.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/_pypi_marker +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/_version.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/auth/__init__.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/auth/consent_form.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/auth/provider.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/backup_manager.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/browser_landing.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/client/__init__.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/client/rest_client.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/client/supervisor_client.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/client/websocket_client.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/client/websocket_listener.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/config.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/errors.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/llm_exposure.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/policy/__init__.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/policy/approval_queue.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/policy/evaluator.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/policy/handlers.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/policy/middleware.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/policy/model.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/policy/persistence.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/policy/value_sources.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/py.typed +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/read_only.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/.github/pull_request_template.md +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/evals/evals.json +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/server.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/settings_ui/__init__.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/settings_ui/settings.css +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/settings_ui/settings.html +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/settings_ui/settings.js +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/smoke_test.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/strict_bps.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/__init__.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/auto_backup.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/backup.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/best_practice_checker.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/component_api.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/config_entry_flow.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/device_control.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/enhanced.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/helpers.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/radio/__init__.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/radio/base.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/radio/matter.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/radio/thread.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/radio/zigbee.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/radio/zwave.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/reference_validator.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/registry.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/smart_search/_base.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/smart_search/_config.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_addons.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_areas.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_blueprints.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_bug_report.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_calendar.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_camera.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_categories.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_code.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_config_automations.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_energy.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_entities.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_filesystem.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_groups.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_hacs.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_history.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_integrations.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_labels.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_mcp_component.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_radio.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_registry.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_resources.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_search.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_service.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_services.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_system.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_themes.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_todo.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_traces.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_updates.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_utility.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_zones.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/util_helpers.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/validation_middleware.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/transforms/__init__.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/transforms/categorized_search.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/transport_security.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/update_check.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/utils/__init__.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/utils/config_hash.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/utils/data_paths.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/utils/domain_handlers.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/utils/fuzzy_search.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/utils/operation_manager.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/utils/python_sandbox.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/utils/skill_loader.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/utils/usage_logger.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/visibility/__init__.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/visibility/model.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/visibility/persistence.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/visibility/resolver.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp_dev.egg-info/SOURCES.txt +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/tests/__init__.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/tests/test_constants.py +0 -0
- {ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/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.dev1895"
|
|
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
|
|
@@ -44,8 +44,25 @@ COMPONENT_DOMAIN = "ha_mcp_tools"
|
|
|
44
44
|
# (custom_components/ha_mcp_tools/const.py OPT_CHANNEL / OPT_PIP_SPEC).
|
|
45
45
|
_OPT_CHANNEL = "channel"
|
|
46
46
|
_OPT_PIP_SPEC = "pip_spec"
|
|
47
|
+
_OPT_SERVER_URL = "server_url"
|
|
48
|
+
_OPT_EXTERNAL_URL = "external_url"
|
|
49
|
+
_OPT_WEBHOOK_ID_OVERRIDE = "webhook_id_override"
|
|
50
|
+
_OPT_SECRET_PATH_OVERRIDE = "secret_path_override"
|
|
47
51
|
_VALID_CHANNELS = ("stable", "dev")
|
|
48
52
|
|
|
53
|
+
# Optional text fields the component's options flow pre-fills via
|
|
54
|
+
# suggested_value (so the UI can clear them). Because an OMITTED optional field
|
|
55
|
+
# reads as "cleared" rather than "unchanged", a partial update_source submit
|
|
56
|
+
# must resend these at their current values or it would blank the user's
|
|
57
|
+
# server-URL / connect-secret overrides.
|
|
58
|
+
_PRESERVED_OPTION_KEYS = (
|
|
59
|
+
_OPT_PIP_SPEC,
|
|
60
|
+
_OPT_SERVER_URL,
|
|
61
|
+
_OPT_EXTERNAL_URL,
|
|
62
|
+
_OPT_WEBHOOK_ID_OVERRIDE,
|
|
63
|
+
_OPT_SECRET_PATH_OVERRIDE,
|
|
64
|
+
)
|
|
65
|
+
|
|
49
66
|
# Delay before a self-affecting action (embedded entry reload / options
|
|
50
67
|
# submit) fires, so this tool's JSON response flushes to the MCP client
|
|
51
68
|
# before the serving thread is torn down. Mirrors
|
|
@@ -85,6 +102,23 @@ def _spawn_background(coro: Any) -> None:
|
|
|
85
102
|
task.add_done_callback(_BACKGROUND_TASKS.discard)
|
|
86
103
|
|
|
87
104
|
|
|
105
|
+
def _field_prefill(item: dict[str, Any]) -> Any:
|
|
106
|
+
"""Return a serialized options-flow field's current value.
|
|
107
|
+
|
|
108
|
+
Reads ``description.suggested_value`` first: a persisted option is
|
|
109
|
+
serialized there (as ``add_suggested_values_to_schema`` does; this component
|
|
110
|
+
sets it directly on the ``vol.Optional`` marker), and the clearable text
|
|
111
|
+
fields carry their value there rather than as a schema ``default`` (a
|
|
112
|
+
``default`` equal to the value would make the field impossible to clear).
|
|
113
|
+
Falls back to ``default`` then ``value`` for the dropdown/toggle fields.
|
|
114
|
+
Mirrors ``tools_integrations.options_from_form_flow``.
|
|
115
|
+
"""
|
|
116
|
+
description = item.get("description")
|
|
117
|
+
if isinstance(description, dict) and description.get("suggested_value") is not None:
|
|
118
|
+
return description["suggested_value"]
|
|
119
|
+
return item.get("default", item.get("value"))
|
|
120
|
+
|
|
121
|
+
|
|
88
122
|
async def find_server_config_entry(
|
|
89
123
|
client: Any,
|
|
90
124
|
) -> tuple[str, dict[str, Any], dict[str, Any]] | None:
|
|
@@ -95,8 +129,9 @@ async def find_server_config_entry(
|
|
|
95
129
|
(services) entry's flow aborts immediately. Returns
|
|
96
130
|
``(entry_id, open_flow, current_options)`` with the options flow left
|
|
97
131
|
OPEN (callers must submit or abort it), or ``None`` when no server
|
|
98
|
-
entry exists. ``current_options`` maps schema field names to their
|
|
99
|
-
|
|
132
|
+
entry exists. ``current_options`` maps schema field names to their current
|
|
133
|
+
values (persisted ``suggested_value`` first, else the schema ``default`` or
|
|
134
|
+
``value``, via ``_field_prefill``).
|
|
100
135
|
|
|
101
136
|
Module-level (not a DevTools method) so the settings UI's embedded
|
|
102
137
|
restart handler can share it.
|
|
@@ -131,7 +166,7 @@ async def find_server_config_entry(
|
|
|
131
166
|
continue
|
|
132
167
|
schema = flow.get("data_schema") or []
|
|
133
168
|
fields: dict[str, Any] = {
|
|
134
|
-
str(item["name"]): item
|
|
169
|
+
str(item["name"]): _field_prefill(item)
|
|
135
170
|
for item in schema
|
|
136
171
|
if isinstance(item, dict) and item.get("name")
|
|
137
172
|
}
|
|
@@ -400,7 +435,16 @@ class DevTools:
|
|
|
400
435
|
await asyncio.sleep(_SELF_ACTION_FLUSH_DELAY_S)
|
|
401
436
|
try:
|
|
402
437
|
result = await self._client.submit_options_flow_step(flow_id, user_input)
|
|
403
|
-
|
|
438
|
+
if result.get("type") == "create_entry":
|
|
439
|
+
logger.info("Deferred options submit applied")
|
|
440
|
+
else:
|
|
441
|
+
# Fire-and-forget: no caller is left to raise to, so a rejected
|
|
442
|
+
# self-restart must at least be discoverable in the log.
|
|
443
|
+
logger.warning(
|
|
444
|
+
"Deferred options submit was not applied (type=%s, errors=%s)",
|
|
445
|
+
result.get("type"),
|
|
446
|
+
result.get("errors") or result.get("reason"),
|
|
447
|
+
)
|
|
404
448
|
except Exception:
|
|
405
449
|
logger.exception("Deferred options-flow submit failed")
|
|
406
450
|
|
|
@@ -819,7 +863,12 @@ class DevTools:
|
|
|
819
863
|
)
|
|
820
864
|
)
|
|
821
865
|
entry_id, flow, current = found
|
|
822
|
-
|
|
866
|
+
# Resend the user's current overrides (see _PRESERVED_OPTION_KEYS) so a
|
|
867
|
+
# channel/pip-spec change here does not blank them — an omitted optional
|
|
868
|
+
# field reads as "cleared", not "unchanged".
|
|
869
|
+
user_input: dict[str, Any] = {
|
|
870
|
+
key: current[key] for key in _PRESERVED_OPTION_KEYS if current.get(key)
|
|
871
|
+
}
|
|
823
872
|
if channel is not None:
|
|
824
873
|
user_input[_OPT_CHANNEL] = channel
|
|
825
874
|
if pip_spec is not 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.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/client/supervisor_client.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/client/websocket_client.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/client/websocket_listener.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/dashboard_screenshot/__init__.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/dashboard_screenshot/capture.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/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.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/AGENTS.md
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/CLAUDE.md
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/resources/skills-vendor/LICENSE
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/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.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/settings_ui/settings.html
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/stdio_settings_sidecar.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/best_practice_checker.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/config_entry_flow.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.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/reference_validator.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/smart_search/__init__.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/smart_search/_base.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/smart_search/_config.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/smart_search/_deep.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/smart_search/_entities.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/smart_search/_fetch.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/smart_search/_overview.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/smart_search/_scenes.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/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.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_blueprints.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_bug_report.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_categories.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_config_automations.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_config_dashboards.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_config_helpers.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_config_scenes.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_config_scripts.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/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.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_integrations.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/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.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_voice_assistant.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/tools_yaml_config.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/tools/validation_middleware.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/transforms/categorized_search.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/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.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/utils/kill_signal_diagnostics.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/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.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp/visibility/persistence.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp_dev.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp_dev.egg-info/entry_points.txt
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp_dev.egg-info/requires.txt
RENAMED
|
File without changes
|
{ha_mcp_dev-7.12.3.dev1894 → ha_mcp_dev-7.12.3.dev1895}/src/ha_mcp_dev.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|