ha-mcp-dev 8.6.0.dev2825__tar.gz → 8.6.0.dev2830__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.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/PKG-INFO +1 -1
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/pyproject.toml +6 -58
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/pyproject.toml.orig +12 -71
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +34 -21
- ha_mcp_dev-8.6.0.dev2830/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-actions.md +536 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +2 -2
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +1 -1
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +14 -1
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +10 -5
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +1 -1
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +1 -1
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +6 -4
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +15 -12
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +2 -2
- ha_mcp_dev-8.6.0.dev2825/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md → ha_mcp_dev-8.6.0.dev2830/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/triggers-and-conditions.md +7 -536
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/server.py +7 -7
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/strict_bps.py +2 -2
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/best_practice_checker.py +21 -21
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/best_practice_result.py +1 -1
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/best_practice_variables.py +2 -2
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_config_automations.py +4 -3
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_config_scripts.py +7 -6
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/util_helpers.py +2 -2
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/utils/skill_loader.py +2 -2
- ha_mcp_dev-8.6.0.dev2825/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -99
- ha_mcp_dev-8.6.0.dev2825/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -99
- ha_mcp_dev-8.6.0.dev2825/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -63
- ha_mcp_dev-8.6.0.dev2825/src/ha_mcp/resources/skills-vendor/README.md +0 -117
- ha_mcp_dev-8.6.0.dev2825/src/ha_mcp/resources/skills-vendor/evals/area-target-over-entity-list/case.yaml +0 -49
- ha_mcp_dev-8.6.0.dev2825/src/ha_mcp/resources/skills-vendor/evals/arrive-home-automation/case.yaml +0 -41
- ha_mcp_dev-8.6.0.dev2825/src/ha_mcp/resources/skills-vendor/evals/assist-shortcut-card/case.yaml +0 -37
- ha_mcp_dev-8.6.0.dev2825/src/ha_mcp/resources/skills-vendor/evals/avg-temperature/case.yaml +0 -50
- ha_mcp_dev-8.6.0.dev2825/src/ha_mcp/resources/skills-vendor/evals/backup-deletion-confirmation/case.yaml +0 -52
- ha_mcp_dev-8.6.0.dev2825/src/ha_mcp/resources/skills-vendor/evals/blueprint-authoring/case.yaml +0 -83
- ha_mcp_dev-8.6.0.dev2825/src/ha_mcp/resources/skills-vendor/evals/button-event-entity/case.yaml +0 -61
- ha_mcp_dev-8.6.0.dev2825/src/ha_mcp/resources/skills-vendor/evals/device-id-trigger-migration/case.yaml +0 -57
- ha_mcp_dev-8.6.0.dev2825/src/ha_mcp/resources/skills-vendor/evals/helper-flow-fields-not-platform-yaml/case.yaml +0 -72
- ha_mcp_dev-8.6.0.dev2825/src/ha_mcp/resources/skills-vendor/evals/media-player-song/case.yaml +0 -52
- ha_mcp_dev-8.6.0.dev2825/src/ha_mcp/resources/skills-vendor/evals/motion-light-automation-mode/case.yaml +0 -52
- ha_mcp_dev-8.6.0.dev2825/src/ha_mcp/resources/skills-vendor/evals/rename-entity-impact-analysis/case.yaml +0 -54
- ha_mcp_dev-8.6.0.dev2825/src/ha_mcp/resources/skills-vendor/evals/template-attributes-yaml-exception/case.yaml +0 -65
- ha_mcp_dev-8.6.0.dev2825/src/ha_mcp/resources/skills-vendor/evals/timer-finished-automation/case.yaml +0 -49
- ha_mcp_dev-8.6.0.dev2825/src/ha_mcp/resources/skills-vendor/evals/vacuum-last-clean/case.yaml +0 -54
- ha_mcp_dev-8.6.0.dev2825/src/ha_mcp/resources/skills-vendor/scripts/check_eval_cases.py +0 -324
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/LICENSE +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/README.md +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/__main__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_pypi_marker +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_rich_compat.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/requirements.txt +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/client.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/server.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_vendor/websockets/version.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/_version.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/auth/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/auth/consent_form.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/auth/oidc_compat.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/auth/provider.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/backup_manager.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/browser_landing.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/client/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/client/admin_routes.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/client/rest_client.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/client/supervisor_client.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/client/websocket_client.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/client/websocket_listener.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/config.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/errors.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/ha_request_queue.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/hacs_auto_refresh.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/http_transport.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/llm_exposure.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/log_filters.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/policy/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/policy/approval_queue.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/policy/decision_pin.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/policy/decisions.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/policy/editing.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/policy/evaluator.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/policy/events.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/policy/handlers.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/policy/middleware.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/policy/model.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/policy/persistence.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/policy/value_sources.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/py.typed +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/read_only.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/redaction.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/renamed_tools.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/server_lifespan.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/_i18n.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/_persistence.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/_theme.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/locales/README.md +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/locales/az.json +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/locales/de.json +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/locales/en.json +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/locales/es.json +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/locales/it.json +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/settings.css +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/settings.html +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/settings_ui/settings.js +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/smoke_test.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tool_dispatch.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/auto_backup.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/backup.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/blueprint_sources.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/blueprint_write.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/bulk_selector.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/component_api.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/component_config_entries.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/component_config_reads.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/component_devices.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/component_registries.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/config_entry_flow.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/config_entry_identity.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/dashboard_list_checks.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/device_control.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/entity_registration.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/error_log_parsing.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/hacs_registration.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/helpers.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/log_common.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/log_sources.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/log_sources_fault.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/radio/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/radio/base.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/radio/matter.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/radio/thread.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/radio/zigbee.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/radio/zwave.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/reference_validator.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/registry.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/scene_discovery.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/smart_search/_base.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/smart_search/_config.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_addons.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_areas.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_blueprints.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_bug_report.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_calendar.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_camera.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_categories.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_code.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_dev.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_energy.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_entities.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_filesystem.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_groups.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_hacs.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_history.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_integrations.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_labels.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_logs.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_radio.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_registry.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_resources.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_search.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_security_policy.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_service.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_services.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_system.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_themes.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_todo.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_traces.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_updates.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_utility.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/tools_zones.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/tools/validation_middleware.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/transforms/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/transforms/categorized_search.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/transforms/component_search.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/transforms/write_tool_note.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/transport_security.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/update_check.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/utils/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/utils/config_hash.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/utils/config_write_lock.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/utils/dashboard_patch.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/utils/data_paths.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/utils/domain_handlers.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/utils/entity_membership.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/utils/fuzzy_search.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/utils/mcp_client_host.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/utils/operation_manager.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/utils/python_sandbox.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/utils/registry_update_lock.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/utils/usage_logger.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/visibility/__init__.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/visibility/enforcement.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/visibility/model.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/visibility/persistence.py +0 -0
- {ha_mcp_dev-8.6.0.dev2825 → ha_mcp_dev-8.6.0.dev2830}/src/ha_mcp/visibility/resolver.py +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "uv_build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "ha-mcp-dev"
|
|
7
|
-
version = "8.6.0.
|
|
7
|
+
version = "8.6.0.dev2830"
|
|
8
8
|
description = "Home Assistant MCP Server - Complete control of Home Assistant through MCP"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.13,<3.15"
|
|
@@ -88,6 +88,9 @@ ha-mcp-oidc = "ha_mcp.__main__:main_oidc"
|
|
|
88
88
|
module-name = "ha_mcp"
|
|
89
89
|
source-exclude = [
|
|
90
90
|
"src/ha_mcp/resources/skills-vendor/.*",
|
|
91
|
+
"src/ha_mcp/resources/skills-vendor/*.md",
|
|
92
|
+
"src/ha_mcp/resources/skills-vendor/evals",
|
|
93
|
+
"src/ha_mcp/resources/skills-vendor/scripts",
|
|
91
94
|
"src/ha_mcp/settings_ui/AGENTS.md",
|
|
92
95
|
"src/ha_mcp/settings_ui/CLAUDE.md",
|
|
93
96
|
]
|
|
@@ -104,24 +107,11 @@ exclude = ["^src/ha_mcp/resources/skills-vendor/"]
|
|
|
104
107
|
warn_return_any = true
|
|
105
108
|
warn_unused_configs = true
|
|
106
109
|
disallow_untyped_defs = true
|
|
107
|
-
disallow_incomplete_defs = true
|
|
108
110
|
check_untyped_defs = true
|
|
109
|
-
no_implicit_optional = true
|
|
110
111
|
warn_redundant_casts = true
|
|
111
112
|
warn_unused_ignores = true
|
|
112
|
-
show_error_codes = true
|
|
113
|
-
namespace_packages = true
|
|
114
113
|
explicit_package_bases = true
|
|
115
114
|
|
|
116
|
-
[[tool.mypy.overrides]]
|
|
117
|
-
module = [
|
|
118
|
-
"jq",
|
|
119
|
-
"psutil",
|
|
120
|
-
"pydantic_monty",
|
|
121
|
-
"pydantic_monty.*",
|
|
122
|
-
]
|
|
123
|
-
ignore_missing_imports = true
|
|
124
|
-
|
|
125
115
|
[[tool.mypy.overrides]]
|
|
126
116
|
module = ["ha_mcp._vendor.*"]
|
|
127
117
|
follow_imports = "skip"
|
|
@@ -130,22 +120,13 @@ ignore_errors = true
|
|
|
130
120
|
[[tool.mypy.overrides]]
|
|
131
121
|
module = [
|
|
132
122
|
"homeassistant.*",
|
|
133
|
-
"aiohasupervisor",
|
|
134
|
-
"aiohasupervisor.*",
|
|
135
|
-
"aiohttp",
|
|
136
123
|
"awesomeversion",
|
|
137
|
-
"yarl",
|
|
138
|
-
"voluptuous",
|
|
139
|
-
"voluptuous_openapi",
|
|
140
124
|
"jsonschema",
|
|
141
|
-
"
|
|
142
|
-
"requests.*",
|
|
125
|
+
"psutil",
|
|
143
126
|
]
|
|
144
127
|
ignore_missing_imports = true
|
|
145
128
|
|
|
146
129
|
[tool.ruff]
|
|
147
|
-
target-version = "py313"
|
|
148
|
-
line-length = 88
|
|
149
130
|
force-exclude = true
|
|
150
131
|
extend-exclude = [
|
|
151
132
|
"tests/initial_test_state",
|
|
@@ -207,20 +188,10 @@ ignore = [
|
|
|
207
188
|
|
|
208
189
|
[tool.ruff.lint.per-file-ignores]
|
|
209
190
|
"__init__.py" = ["F401"]
|
|
210
|
-
"tests/**/*" = [
|
|
211
|
-
"E501",
|
|
212
|
-
"B011",
|
|
213
|
-
]
|
|
214
|
-
"homeassistant-addon-webhook-proxy/start.py" = ["PLR5501"]
|
|
215
|
-
"homeassistant-addon-webhook-proxy/mcp_proxy/__init__.py" = ["PLC0207"]
|
|
216
|
-
"homeassistant-addon-webhook-proxy-dev/start.py" = ["PLR5501"]
|
|
217
|
-
"homeassistant-addon-webhook-proxy-dev/mcp_proxy_dev/__init__.py" = ["PLC0207"]
|
|
191
|
+
"tests/**/*" = ["B011"]
|
|
218
192
|
|
|
219
193
|
[tool.pytest.ini_options]
|
|
220
194
|
testpaths = ["tests"]
|
|
221
|
-
python_files = ["test_*.py"]
|
|
222
|
-
python_classes = ["Test*"]
|
|
223
|
-
python_functions = ["test_*"]
|
|
224
195
|
empty_parameter_set_mark = "fail_at_collect"
|
|
225
196
|
addopts = [
|
|
226
197
|
"--strict-markers",
|
|
@@ -235,7 +206,6 @@ markers = [
|
|
|
235
206
|
"slow: marks tests as slow (use -m 'not slow' to skip)",
|
|
236
207
|
"addon_disruptive: restarts the server-under-test's own process (addon self-restart); must never run concurrently with other tests on lanes where the MCP server is out-of-process - the lane workflow runs these in a single-worker phase AFTER the parallel run",
|
|
237
208
|
"unit: unit tests (isolated, fast)",
|
|
238
|
-
"integration: integration tests requiring external services",
|
|
239
209
|
"e2e: end-to-end tests with full system",
|
|
240
210
|
"performance: performance and load tests",
|
|
241
211
|
"automation: automation lifecycle tests",
|
|
@@ -301,18 +271,9 @@ build_command = """
|
|
|
301
271
|
pip install uv && uv lock
|
|
302
272
|
git add uv.lock
|
|
303
273
|
"""
|
|
304
|
-
dist_path = "dist/"
|
|
305
|
-
upload_to_PyPI = true
|
|
306
|
-
upload_to_release = true
|
|
307
|
-
remove_dist = false
|
|
308
274
|
commit_parser = "angular"
|
|
309
275
|
|
|
310
276
|
[tool.semantic_release.commit_parser_options]
|
|
311
|
-
major_tags = [
|
|
312
|
-
"BREAKING",
|
|
313
|
-
"!",
|
|
314
|
-
]
|
|
315
|
-
minor_tags = ["feat"]
|
|
316
277
|
patch_tags = [
|
|
317
278
|
"fix",
|
|
318
279
|
"perf",
|
|
@@ -320,38 +281,26 @@ patch_tags = [
|
|
|
320
281
|
]
|
|
321
282
|
|
|
322
283
|
[tool.semantic_release.changelog]
|
|
323
|
-
template_dir = "templates"
|
|
324
284
|
exclude_commit_patterns = [
|
|
325
285
|
'^.*\(site\).*$',
|
|
326
286
|
'chore\(addon\): [Ss]ync changelog.*',
|
|
327
287
|
'chore\(addon\): [Pp]ublish dev addon version.*',
|
|
328
288
|
]
|
|
329
289
|
|
|
330
|
-
[tool.semantic_release.changelog.default_templates]
|
|
331
|
-
changelog_file = "CHANGELOG.md"
|
|
332
|
-
major_on_zero = true
|
|
333
|
-
allow_zero_version = false
|
|
334
|
-
branch = "master"
|
|
335
|
-
|
|
336
290
|
[tool.semantic_release.publish]
|
|
337
291
|
upload_to_vcs_release = false
|
|
338
292
|
|
|
339
293
|
[dependency-groups]
|
|
340
294
|
dev = [
|
|
341
295
|
"aiohttp>=3.13.5",
|
|
342
|
-
"build>=1.2.2",
|
|
343
296
|
"websockets>=15.0.1",
|
|
344
297
|
"docker>=7.1.0",
|
|
345
298
|
"mcp>=1.26.0,<2",
|
|
346
299
|
"mypy>=1.17.0",
|
|
347
300
|
"openai>=1.0.0",
|
|
348
|
-
"jsonschema>=4.25.1",
|
|
349
301
|
"pyinstaller>=6.0.0",
|
|
350
|
-
"pynacl>=1.6.0",
|
|
351
|
-
"psutil>=7.0.0",
|
|
352
302
|
"pytest>=8.4.2",
|
|
353
303
|
"pytest-asyncio>=1.1.0",
|
|
354
|
-
"pytest-cov>=5.0.0",
|
|
355
304
|
"pytest-timeout>=2.3.0",
|
|
356
305
|
"pytest-rerunfailures>=15.0",
|
|
357
306
|
"voluptuous>=0.15.2",
|
|
@@ -364,7 +313,6 @@ dev = [
|
|
|
364
313
|
"ruff>=0.12.12",
|
|
365
314
|
"testcontainers>=4.13.0",
|
|
366
315
|
"ast-grep-cli>=0.42.0",
|
|
367
|
-
"pyyaml>=6.0",
|
|
368
316
|
"python-semantic-release==10.6.2",
|
|
369
317
|
"hamcp-test-env",
|
|
370
318
|
]
|
|
@@ -4,7 +4,7 @@ build-backend = "uv_build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "ha-mcp-dev"
|
|
7
|
-
version = "8.6.0.
|
|
7
|
+
version = "8.6.0.dev2830"
|
|
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
|
|
@@ -86,7 +86,7 @@ dependencies = [
|
|
|
86
86
|
# in-process embedding (HA 2026.6 pins cryptography==48.0.0, 2026.7 pins
|
|
87
87
|
# 48.0.1 — the floor must admit every supported core's pin; live-found on
|
|
88
88
|
# the embedded e2e lane against the HA 2026.6.4 image).
|
|
89
|
-
#
|
|
89
|
+
# Only the vendored fastmcp and mcp trees import cryptography; our own code does not.
|
|
90
90
|
"cryptography>=48.0.0,<51",
|
|
91
91
|
"pydantic-monty==0.0.18",
|
|
92
92
|
"tzdata>=2024.1",
|
|
@@ -110,11 +110,15 @@ ha-mcp-oidc = "ha_mcp.__main__:main_oidc"
|
|
|
110
110
|
# Explicit because publish-dev.yml renames the project to ha-mcp-dev, which
|
|
111
111
|
# would otherwise make the module name ha_mcp_dev.
|
|
112
112
|
module-name = "ha_mcp"
|
|
113
|
-
# Every file under src/ha_mcp ships unless excluded here.
|
|
114
|
-
# submodule
|
|
115
|
-
# read at runtime
|
|
113
|
+
# Every file under src/ha_mcp ships unless excluded here. Of the skills
|
|
114
|
+
# submodule only skills/ and LICENSE ship; its evals, scripts, docs, git and
|
|
115
|
+
# CI files are not read at runtime, and neither is the settings UI's agent
|
|
116
|
+
# guide.
|
|
116
117
|
source-exclude = [
|
|
117
118
|
"src/ha_mcp/resources/skills-vendor/.*",
|
|
119
|
+
"src/ha_mcp/resources/skills-vendor/*.md",
|
|
120
|
+
"src/ha_mcp/resources/skills-vendor/evals",
|
|
121
|
+
"src/ha_mcp/resources/skills-vendor/scripts",
|
|
118
122
|
"src/ha_mcp/settings_ui/AGENTS.md",
|
|
119
123
|
"src/ha_mcp/settings_ui/CLAUDE.md",
|
|
120
124
|
]
|
|
@@ -136,24 +140,11 @@ exclude = ['^src/ha_mcp/resources/skills-vendor/']
|
|
|
136
140
|
warn_return_any = true
|
|
137
141
|
warn_unused_configs = true
|
|
138
142
|
disallow_untyped_defs = true
|
|
139
|
-
disallow_incomplete_defs = true
|
|
140
143
|
check_untyped_defs = true
|
|
141
|
-
no_implicit_optional = true
|
|
142
144
|
warn_redundant_casts = true
|
|
143
145
|
warn_unused_ignores = true
|
|
144
|
-
show_error_codes = true
|
|
145
|
-
namespace_packages = true
|
|
146
146
|
explicit_package_bases = true
|
|
147
147
|
|
|
148
|
-
[[tool.mypy.overrides]]
|
|
149
|
-
module = [
|
|
150
|
-
"jq",
|
|
151
|
-
"psutil",
|
|
152
|
-
"pydantic_monty",
|
|
153
|
-
"pydantic_monty.*",
|
|
154
|
-
]
|
|
155
|
-
ignore_missing_imports = true
|
|
156
|
-
|
|
157
148
|
[[tool.mypy.overrides]]
|
|
158
149
|
# Vendored websockets: upstream's typing, not ours to check. follow_imports
|
|
159
150
|
# skip keeps our client code checked against Any instead of dragging the
|
|
@@ -165,25 +156,14 @@ ignore_errors = true
|
|
|
165
156
|
[[tool.mypy.overrides]]
|
|
166
157
|
module = [
|
|
167
158
|
"homeassistant.*",
|
|
168
|
-
"aiohasupervisor",
|
|
169
|
-
"aiohasupervisor.*",
|
|
170
|
-
"aiohttp",
|
|
171
159
|
"awesomeversion",
|
|
172
|
-
"yarl",
|
|
173
|
-
"voluptuous",
|
|
174
|
-
# Ships with HA core at runtime (helpers.llm schema conversion, #1745);
|
|
175
|
-
# not installed in this dev environment.
|
|
176
|
-
"voluptuous_openapi",
|
|
177
160
|
"jsonschema",
|
|
178
|
-
"
|
|
179
|
-
"requests.*",
|
|
161
|
+
"psutil",
|
|
180
162
|
]
|
|
181
163
|
ignore_missing_imports = true
|
|
182
164
|
|
|
183
165
|
|
|
184
166
|
[tool.ruff]
|
|
185
|
-
target-version = "py313"
|
|
186
|
-
line-length = 88
|
|
187
167
|
# Apply the excludes below to explicit paths too: lefthook passes
|
|
188
168
|
# {staged_files} and Fast Checks passes the changed files, so without this the
|
|
189
169
|
# vendored trees get reformatted or fail the format gate.
|
|
@@ -264,21 +244,7 @@ ignore = [
|
|
|
264
244
|
|
|
265
245
|
[tool.ruff.lint.per-file-ignores]
|
|
266
246
|
"__init__.py" = ["F401"]
|
|
267
|
-
"tests/**/*" = ["
|
|
268
|
-
# Temporary: the equivalent PLC0207/PLR5501 fixes landed in
|
|
269
|
-
# homeassistant-addon-webhook-proxy-dev/ only, per the dev-first/promote-only
|
|
270
|
-
# flow (allow-stable-edit is for exceptional stable-only repairs, not routine sweeps —
|
|
271
|
-
# see homeassistant-addon-webhook-proxy/AGENTS.md "Dev-first, promote-only").
|
|
272
|
-
# The -dev entries name where a reset-dev-from-stable run puts those same two
|
|
273
|
-
# stable files (start.py stays put, mcp_proxy/ is renamed to mcp_proxy_dev/),
|
|
274
|
-
# so the auto-opened reset PR lints clean. Scoped per file and per rule so
|
|
275
|
-
# both rules stay live everywhere else in both trees — the -dev tree is where
|
|
276
|
-
# all new webhook-proxy code is authored. Remove all four once the next
|
|
277
|
-
# promote carries the fixes into stable.
|
|
278
|
-
"homeassistant-addon-webhook-proxy/start.py" = ["PLR5501"]
|
|
279
|
-
"homeassistant-addon-webhook-proxy/mcp_proxy/__init__.py" = ["PLC0207"]
|
|
280
|
-
"homeassistant-addon-webhook-proxy-dev/start.py" = ["PLR5501"]
|
|
281
|
-
"homeassistant-addon-webhook-proxy-dev/mcp_proxy_dev/__init__.py" = ["PLC0207"]
|
|
247
|
+
"tests/**/*" = ["B011"]
|
|
282
248
|
# C901 is enforced repo-wide with no per-file exemptions (the grandfathered
|
|
283
249
|
# list was fully cleared by issue #925). Do NOT add "path" = ["C901"] entries
|
|
284
250
|
# here — extract helpers to bring the function below the threshold instead:
|
|
@@ -286,9 +252,6 @@ ignore = [
|
|
|
286
252
|
|
|
287
253
|
[tool.pytest.ini_options]
|
|
288
254
|
testpaths = ["tests"]
|
|
289
|
-
python_files = ["test_*.py"]
|
|
290
|
-
python_classes = ["Test*"]
|
|
291
|
-
python_functions = ["test_*"]
|
|
292
255
|
# A parametrize list that resolves to nothing is a guard that silently stopped
|
|
293
256
|
# running: pytest reports "got empty parameter set", and the summary counts it
|
|
294
257
|
# as neither a failure nor a real skip. Make it a collection error instead.
|
|
@@ -313,7 +276,6 @@ markers = [
|
|
|
313
276
|
|
|
314
277
|
# Test types
|
|
315
278
|
"unit: unit tests (isolated, fast)",
|
|
316
|
-
"integration: integration tests requiring external services",
|
|
317
279
|
"e2e: end-to-end tests with full system",
|
|
318
280
|
"performance: performance and load tests",
|
|
319
281
|
|
|
@@ -407,7 +369,6 @@ dev = [
|
|
|
407
369
|
# Floor = the aiohttp HA core 2026.6 pins (2026.7 pins 3.14.1, 2026.8.dev
|
|
408
370
|
# pins 3.14.3), so the version tested here is one a supported HA runs.
|
|
409
371
|
"aiohttp>=3.13.5",
|
|
410
|
-
"build>=1.2.2",
|
|
411
372
|
# Test infrastructure imports the SHARED websockets directly (the HAOS
|
|
412
373
|
# runtime harness, the image bake, wait_helpers) to talk to Home
|
|
413
374
|
# Assistant's own WebSocket API — that is test tooling driving HA, not
|
|
@@ -420,13 +381,9 @@ dev = [
|
|
|
420
381
|
"mcp>=1.26.0,<2",
|
|
421
382
|
"mypy>=1.17.0",
|
|
422
383
|
"openai>=1.0.0",
|
|
423
|
-
"jsonschema>=4.25.1",
|
|
424
384
|
"pyinstaller>=6.0.0",
|
|
425
|
-
"pynacl>=1.6.0",
|
|
426
|
-
"psutil>=7.0.0",
|
|
427
385
|
"pytest>=8.4.2",
|
|
428
386
|
"pytest-asyncio>=1.1.0",
|
|
429
|
-
"pytest-cov>=5.0.0",
|
|
430
387
|
"pytest-timeout>=2.3.0",
|
|
431
388
|
"pytest-rerunfailures>=15.0",
|
|
432
389
|
# Real voluptuous for the config-flow tests (the component's
|
|
@@ -450,7 +407,6 @@ dev = [
|
|
|
450
407
|
"ruff>=0.12.12",
|
|
451
408
|
"testcontainers>=4.13.0",
|
|
452
409
|
"ast-grep-cli>=0.42.0",
|
|
453
|
-
"pyyaml>=6.0",
|
|
454
410
|
# Renders templates/CHANGELOG.md.j2 in test_changelog_template.py. Keep the
|
|
455
411
|
# version equal to the action pinned in .github/workflows/semver-release.yml,
|
|
456
412
|
# so the test renders with the release that writes the real notes.
|
|
@@ -469,34 +425,19 @@ build_command = """
|
|
|
469
425
|
pip install uv && uv lock
|
|
470
426
|
git add uv.lock
|
|
471
427
|
"""
|
|
472
|
-
dist_path = "dist/"
|
|
473
|
-
upload_to_PyPI = true
|
|
474
|
-
upload_to_release = true
|
|
475
|
-
remove_dist = false
|
|
476
428
|
|
|
477
429
|
# Commit message parsing
|
|
478
430
|
commit_parser = "angular"
|
|
479
|
-
commit_parser_options = {
|
|
431
|
+
commit_parser_options = { patch_tags = ["fix", "perf", "refactor"] }
|
|
480
432
|
|
|
481
433
|
# Changelog configuration
|
|
482
434
|
[tool.semantic_release.changelog]
|
|
483
|
-
template_dir = "templates"
|
|
484
435
|
exclude_commit_patterns = [
|
|
485
436
|
"^.*\\(site\\).*$", # Commits with (site) scope
|
|
486
437
|
'''chore\(addon\): [Ss]ync changelog.*''', # Changelog sync commits
|
|
487
438
|
'''chore\(addon\): [Pp]ublish dev addon version.*''', # One per master merge
|
|
488
439
|
]
|
|
489
440
|
|
|
490
|
-
[tool.semantic_release.changelog.default_templates]
|
|
491
|
-
changelog_file = "CHANGELOG.md"
|
|
492
|
-
|
|
493
|
-
# Version scheme
|
|
494
|
-
major_on_zero = true
|
|
495
|
-
allow_zero_version = false
|
|
496
|
-
|
|
497
|
-
# Branch and tag configuration
|
|
498
|
-
branch = "master"
|
|
499
|
-
|
|
500
441
|
# Publish configuration (v10 syntax)
|
|
501
442
|
[tool.semantic_release.publish]
|
|
502
443
|
# GitHub release is created by build-binary.yml workflow to include binaries
|
|
@@ -23,13 +23,19 @@ description: >
|
|
|
23
23
|
- Existing state changed with no recovery path
|
|
24
24
|
- Jinja copy-pasted between templates
|
|
25
25
|
metadata:
|
|
26
|
-
version: "
|
|
26
|
+
version: "44"
|
|
27
27
|
---
|
|
28
28
|
|
|
29
29
|
# Home Assistant Best Practices
|
|
30
30
|
|
|
31
31
|
**Core principle:** Use native Home Assistant constructs wherever possible. Templates bypass validation, fail silently at runtime, and make debugging opaque.
|
|
32
32
|
|
|
33
|
+
**No tool reaches the HA API?** Do not stop to ask for access. If you can drive a browser on the HA web UI, make the change there, but first show the user the exact change and wait for their OK before you save: approving a click does not show them what it writes. Otherwise give the user the complete config to create in the UI (for an automation, the YAML for the editor's **Edit in YAML** mode; for a helper, its form fields), and name the entity IDs you assumed. Config that can only be written in YAML is edited with the File editor app (or in the config folder on a Container install): keep a copy of the file first, then check the configuration and run the matching reload in the **YAML** tab of **Tools** (named **Developer Tools** before 2026.8; restart if it isn't listed).
|
|
34
|
+
|
|
35
|
+
**A feature marked with a release (2026.5+) depends on the instance's version.** Read it before choosing: `version` in `GET /api/config`, or **Settings → About** in the UI. On that release or later, use the feature and do not offer the older way as an equal choice. If you cannot read the version, assume a current release and name the older fallback with the version it needs.
|
|
36
|
+
|
|
37
|
+
**Read the matching reference before you answer.** This page only summarizes the files in [Reference Files](#reference-files); the exact keys, fields and working examples are in them. Read every file whose row matches the task, and only those: do not load all reference files upfront.
|
|
38
|
+
|
|
33
39
|
## Decision Workflow
|
|
34
40
|
|
|
35
41
|
Follow this sequence when creating any automation:
|
|
@@ -41,17 +47,21 @@ If your change affects entity IDs, display names, or cross-component references
|
|
|
41
47
|
Steps 1-5 below apply to new config or pattern evaluation.
|
|
42
48
|
|
|
43
49
|
### 1. Check for a purpose-specific, then generic native, trigger/condition
|
|
44
|
-
Since 2026.7 the default building blocks are purpose-specific triggers/conditions — `<domain>.<name>` keys (motion detected, battery low, door opened) with area/floor/label targets. Check for one that matches the intent first, then a generic native trigger/condition, and only then a template.
|
|
50
|
+
Since 2026.7 the default building blocks are purpose-specific triggers/conditions — `<domain>.<name>` keys (motion detected, battery low, door opened) with area/floor/label targets. Check for one that matches the intent first, then a generic native trigger/condition, and only then a template. Read [triggers-and-conditions #purpose-specific-triggers--conditions-default-since-20267](references/triggers-and-conditions.md#purpose-specific-triggers--conditions-default-since-20267) before writing the trigger.
|
|
51
|
+
|
|
52
|
+
A purpose-specific trigger takes `entity_id` in its `target:` as well, so one known sensor is not a reason to fall back to `trigger: state`. Write the automation with the purpose-specific trigger; do not offer it only as an optional upgrade.
|
|
45
53
|
|
|
46
54
|
**Common substitutions:**
|
|
55
|
+
- `trigger: state` on a motion, occupancy or door `binary_sensor` → `motion.detected`/`motion.cleared`, `occupancy.detected`/`occupancy.cleared` or `door.opened`/`door.closed` with `target: {entity_id: ...}`, or `area_id` when the area is known
|
|
47
56
|
- List of individual sensor entities in a trigger → one purpose-specific trigger with an area/floor/label `target:`
|
|
57
|
+
- `delay` after `motion.detected` for "no motion anywhere for N minutes" → `motion.cleared` with `options: {behavior: all, for: ...}`, which fires once every targeted sensor has been clear that long (`unavailable` and `unknown` sensors are left out of the count)
|
|
48
58
|
- `{{ states('x') | float > 25 }}` → `numeric_state` condition with `above: 25`
|
|
49
59
|
- `{{ is_state('x', 'on') and is_state('y', 'on') }}` → `condition: and` with state conditions
|
|
50
60
|
- `{{ now().hour >= 9 }}` → `condition: time` with `after: "09:00:00"`
|
|
51
61
|
- `wait_template: "{{ is_state(...) }}"` → `wait_for_trigger` with state trigger (caveat: different behavior when state is already true — see [safe-refactoring #trigger-restructuring](references/safe-refactoring.md#trigger-restructuring))
|
|
52
62
|
|
|
53
63
|
### 2. Check for built-in helper or Template Helper
|
|
54
|
-
|
|
64
|
+
Read [helper-selection](references/helper-selection.md) before creating a template sensor.
|
|
55
65
|
|
|
56
66
|
**Common substitutions:**
|
|
57
67
|
- Sum/average multiple sensors → `min_max` integration
|
|
@@ -70,7 +80,7 @@ the config needs a key the flow has no field for — trigger-based templates and
|
|
|
70
80
|
are the common ones. Then use managed YAML editing ([yaml-only-integrations](references/yaml-only-integrations.md)), not a hand-edit.
|
|
71
81
|
|
|
72
82
|
### 3. Select correct automation mode
|
|
73
|
-
Default `single` mode is often wrong. See [automation-
|
|
83
|
+
Default `single` mode is often wrong. See [automation-actions #automation-modes](references/automation-actions.md#automation-modes).
|
|
74
84
|
|
|
75
85
|
| Scenario | Mode |
|
|
76
86
|
|----------|------|
|
|
@@ -85,11 +95,11 @@ Default `single` mode is often wrong. See [automation-patterns #automation-modes
|
|
|
85
95
|
**Exception:** Zigbee2MQTT autodiscovered device triggers are acceptable.
|
|
86
96
|
|
|
87
97
|
### 5. For buttons and remotes
|
|
88
|
-
- **Any integration exposing an `event.*` entity:** Use `event.received` targeting that entity
|
|
98
|
+
- **Any integration exposing an `event.*` entity:** Use `event.received` targeting that entity (see the anti-pattern row below)
|
|
89
99
|
- **ZHA:** No event entities — use an `event` trigger with `device_ieee` (persistent)
|
|
90
100
|
- **Z2M:** Event entities are experimental and off by default — use a `device` trigger (autodiscovered) or `mqtt` trigger
|
|
91
101
|
|
|
92
|
-
|
|
102
|
+
Read [device-control #buttonremote-patterns](references/device-control.md#buttonremote-patterns) before writing the trigger.
|
|
93
103
|
|
|
94
104
|
---
|
|
95
105
|
|
|
@@ -97,28 +107,30 @@ See [device-control #buttonremote-patterns](references/device-control.md#buttonr
|
|
|
97
107
|
|
|
98
108
|
| Anti-pattern | Use instead | Why | Reference |
|
|
99
109
|
|--------------|-------------|-----|-----------|
|
|
100
|
-
| `condition: template` with `float > 25` | `condition: numeric_state` | Validated at load, not runtime | [
|
|
101
|
-
| `wait_template: "{{ is_state(...) }}"` | `wait_for_trigger` with state trigger | Event-driven, not polling; waits for *change* (see [safe-refactoring #trigger-restructuring](references/safe-refactoring.md#trigger-restructuring) for semantic differences) | [automation-
|
|
110
|
+
| `condition: template` with `float > 25` | `condition: numeric_state` | Validated at load, not runtime | [triggers-and-conditions #native-conditions](references/triggers-and-conditions.md#native-conditions) |
|
|
111
|
+
| `wait_template: "{{ is_state(...) }}"` | `wait_for_trigger` with state trigger | Event-driven, not polling; waits for *change* (see [safe-refactoring #trigger-restructuring](references/safe-refactoring.md#trigger-restructuring) for semantic differences) | [automation-actions #wait-actions](references/automation-actions.md#wait-actions) |
|
|
102
112
|
| `device_id` in triggers | `entity_id` (or `device_ieee` for ZHA) | device_id breaks on re-add | [device-control #entity-id-vs-device-id](references/device-control.md#entity-id-vs-device-id) |
|
|
103
|
-
| `
|
|
104
|
-
| `
|
|
105
|
-
| `
|
|
113
|
+
| `event` trigger on an integration's bus event (e.g. `hue_event`) for a button that has an `event.*` entity | `event.received` targeting that entity, with values read from its `event_types` attribute | The entity can be renamed and survives a re-add when the integration keeps a stable unique ID; bus event data differs per integration | [device-control #buttonremote-patterns](references/device-control.md#buttonremote-patterns) |
|
|
114
|
+
| `numeric_state` trigger driving a costly action, unguarded | Condition rejecting `unavailable`/`unknown` in `trigger.from_state` | A restart or blip re-arms the trigger, so an unchanged value fires with no crossing (the guard also drops real crossings) | [triggers-and-conditions #unavailable-arms-a-numeric-state-trigger](references/triggers-and-conditions.md#unavailable-arms-a-numeric-state-trigger) |
|
|
115
|
+
| `mode: single` for motion lights | `mode: restart` | Re-triggers must reset the timer | [automation-actions #automation-modes](references/automation-actions.md#automation-modes) |
|
|
116
|
+
| `enabled: false` as a top-level key in `automations.yaml` | `automation.turn_off` (temporary) or entity registry disable (permanent) | Not a valid top-level key — rejected during schema validation; automation loads as `unavailable` | [automation-actions #disabling-automations](references/automation-actions.md#disabling-automations) |
|
|
106
117
|
| Template sensor for sum/mean | `min_max` helper | Declarative, handles unavailable states | [helper-selection #numeric-aggregation](references/helper-selection.md#numeric-aggregation) |
|
|
107
118
|
| Template binary sensor with threshold | `threshold` helper | Built-in hysteresis support | [helper-selection #threshold](references/helper-selection.md#threshold) |
|
|
108
119
|
| Renaming entity IDs without impact analysis | Follow [safe-refactoring](references/safe-refactoring.md) workflow | Renames break dashboards, scripts, scenes, Config-Entry data, and storage dashboards silently | [safe-refactoring #entity-renames](references/safe-refactoring.md#entity-renames) |
|
|
109
120
|
| Renaming members of Config-Entry-based groups (UI groups) without updating membership | Update group membership via Options Flow after the registry rename | The entity registry rename does not update `options.entities` in the Config Entry — group silently breaks | [safe-refactoring #config-entry-groups](references/safe-refactoring.md#config-entry-groups) |
|
|
110
|
-
| Renaming entities used by Config-Entry integrations (Better
|
|
121
|
+
| Renaming entities used by Min/Max helpers or custom Config-Entry integrations (e.g. Better Thermostat) without checking their Config-Entry data | Scan the config entries' `data`+`options`; re-select the renamed entity in the Min/Max Options Flow. An integration that keeps it in `data` (Better Thermostat) has no API fix: tell the user and take a full backup before the rename | They store entity_ids in the Config Entry, and a registry rename does not update them; single-source helpers such as Threshold (since 2025.6) and Generic Thermostat update themselves | [safe-refactoring #config-entry-data--blind-spots-for-entity-registry-renames](references/safe-refactoring.md#config-entry-data--blind-spots-for-entity-registry-renames) |
|
|
111
122
|
| `template:` sensor/binary sensor in YAML | Template Helper via the config flow | A flow helper reloads in place and stays UI-editable; a `template:` entry needs a config reload and does not. Exceptions are real — trigger-based templates and `attributes:` have no flow field | [helper-selection #template-helpers](references/helper-selection.md#template-helpers) |
|
|
112
123
|
| Editing `.storage/` files or other HA internal state directly | Use the HA REST/WebSocket API to manage state and config entries | `.storage/` files are HA's internal state database; direct edits bypass validation, risk corruption, and can be silently overwritten by HA | — |
|
|
113
124
|
| Writing raw YAML to `configuration.yaml` by hand for YAML-only integrations | Use managed YAML config editing with backup and validation | Unmanaged writes risk syntax errors, have no backup, and skip `check_config` — managed editing provides all three | [yaml-only-integrations](references/yaml-only-integrations.md) |
|
|
114
|
-
| Generating YAML snippets for automations/scripts/scenes | Use the HA config API to create automations/scripts programmatically | API calls validate config, avoid syntax errors, and don't require manual file edits or restarts | [automation-
|
|
125
|
+
| Generating YAML snippets for automations/scripts/scenes | Use the HA config API to create automations/scripts programmatically; with no API access, give the config for the UI editor instead | API calls validate config, avoid syntax errors, and don't require manual file edits or restarts | [triggers-and-conditions](references/triggers-and-conditions.md), [automation-actions](references/automation-actions.md), [examples.yaml](references/examples.yaml) |
|
|
115
126
|
| Telling user to edit `configuration.yaml` for integrations | Direct user to Settings > Devices & Services in the HA UI | Most integrations are UI-configured; YAML integration config is rare and integration-specific | — |
|
|
116
127
|
| Referring to HA "add-ons" | Use the term "Apps" | HA renamed add-ons to Apps in 2026.2 — "Apps are standalone applications that run alongside Home Assistant" | — |
|
|
117
|
-
| `vacuum.send_command` with vendor room IDs | `vacuum.clean_area` with HA `
|
|
118
|
-
| Using `color_temp` (mireds) in light actions | Use `color_temp_kelvin` | The `color_temp` parameter was removed in 2026.3; only Kelvin is supported | [device-control #lights](references/device-control.md#lights) |
|
|
119
|
-
|
|
|
120
|
-
|
|
|
121
|
-
|
|
|
128
|
+
| `vacuum.send_command` with vendor room IDs | `vacuum.clean_area` with HA area IDs in `cleaning_area_id` (if segments are mapped) | Uses native HA areas, works across integrations — but requires segment-to-area mapping in entity settings first | [device-control #vacuum-control](references/device-control.md#vacuum-control) |
|
|
129
|
+
| Using `color_temp` (mireds) in light actions | Use `color_temp_kelvin` with the value converted: Kelvin = 1,000,000 ÷ mireds (500 mireds = 2000 K) | The `color_temp` parameter was removed in 2026.3; only Kelvin is supported, and HA accepts any positive number there, so a mireds value copied across is read as Kelvin (500 mireds becomes 500 K) | [device-control #lights](references/device-control.md#lights) |
|
|
130
|
+
| Saving states or attributes in `variables:`, or hard-coding values, to put devices back after a temporary change | `scene.create` with `snapshot_entities` before the change, then `scene.turn_on` on that scene | The snapshot keeps each entity's own state, including a light that was off, in one call; variables need a template per attribute and a restore step per entity | [scenes #snapshot--restore-scenecreate](references/scenes.md#snapshot--restore-scenecreate) |
|
|
131
|
+
| Person/Device Tracker `entered_home`/`left_home` device triggers or `is_home`/`is_not_home` conditions | `state` trigger `to: home` / `to: not_home`, or `state` condition | These were removed in 2026.5 — state triggers and conditions are the correct replacements | [triggers-and-conditions #presence-and-person-triggers-and-conditions-removed-in-20265](references/triggers-and-conditions.md#presence-and-person-triggers-and-conditions-removed-in-20265) |
|
|
132
|
+
| Entity list in a trigger where an area/floor/label target fits | Purpose-specific trigger with `target: {area_id: ...}` | Automation follows area membership as devices change — no stale entity lists | [triggers-and-conditions #purpose-specific-triggers--conditions-default-since-20267](references/triggers-and-conditions.md#purpose-specific-triggers--conditions-default-since-20267) |
|
|
133
|
+
| Old purpose-specific keys (`battery.low`, `vacuum.docked`, `timer.time_remaining`, ...) or trigger `behavior: any`/`last` | Renamed 2026.7 keys (`battery.became_low`, ...) and `behavior: each`/`all` (renamed 2026.6) | Old keys no longer load; old behavior values raise a repair issue and face removal | [triggers-and-conditions #purpose-specific-triggers--conditions-default-since-20267](references/triggers-and-conditions.md#purpose-specific-triggers--conditions-default-since-20267) |
|
|
122
134
|
| AppDaemon: callbacks in `__init__`, uncancelled `run_in` timers, state in instance variables, hardcoded entity IDs | Register in `initialize()`, cancel before rescheduling, persist via `input_*` helpers, pass IDs through `self.args` | Each fails silently, resets on reload, or blocks reuse | [appdaemon #appdaemon-specific-anti-patterns](references/appdaemon.md#appdaemon-specific-anti-patterns) |
|
|
123
135
|
| Blueprints: hardcoded entities, free text where a selector belongs, `!input` inside a template, missing `source_url` | Typed `!input` selectors; bind an input to `variables:` before templating it; always set `source_url` | Hardcoding defeats reuse, text lets typos through, and `!input` is a YAML tag rather than a template value | [blueprint-guide #common-pitfalls](references/blueprint-guide.md#common-pitfalls) |
|
|
124
136
|
| Backups: full restore to undo one object edit, no backup before an irreversible operation (registry deletion, integration removal, Core/OS upgrade), calling an action "reversible" without naming its inverse | Roll the single object back; take the backup *before*; name the exact inverse or treat it as irreversible | A full restore reverts every unrelated change since and restarts HA; a backup taken afterward captures the damage | [backups #when-a-full-backup-earns-its-cost](references/backups.md#when-a-full-backup-earns-its-cost) |
|
|
@@ -130,17 +142,18 @@ See [device-control #buttonremote-patterns](references/device-control.md#buttonr
|
|
|
130
142
|
|
|
131
143
|
## Reference Files
|
|
132
144
|
|
|
133
|
-
Read
|
|
145
|
+
Read each file whose row matches the task before you answer:
|
|
134
146
|
|
|
135
147
|
| File | When to read |
|
|
136
148
|
|------|--------------|
|
|
137
149
|
| [safe-refactoring](references/safe-refactoring.md) | Renaming entities or their display names, replacing helpers, restructuring automations, or any modification to existing config |
|
|
138
|
-
| [
|
|
150
|
+
| [triggers-and-conditions](references/triggers-and-conditions.md) | Writing an automation's triggers or conditions: purpose-specific and native triggers/conditions, `for:` durations, trigger IDs |
|
|
151
|
+
| [automation-actions](references/automation-actions.md) | Writing the actions of an automation or script, or choosing its mode: waits, variables, capturing action responses, `continue_on_error`, admin-only actions (`Unauthorized`) in scripts, stopping a sequence, repeat, if/then vs choose, parallel; documenting/annotating steps; disabling automations |
|
|
139
152
|
| [helper-selection](references/helper-selection.md) | Deciding whether to use a built-in helper vs template sensor — aggregation, rate of change, thresholds, time-in-state, counting/timing, scheduling, grouping, probabilistic inference, smoothing, climate, domain conversion, decision matrix |
|
|
140
153
|
| [template-guidelines](references/template-guidelines.md) | Confirming templates ARE appropriate for a use case; sharing Jinja logic between templates with `custom_templates` macros |
|
|
141
154
|
| [yaml-only-integrations](references/yaml-only-integrations.md) | Creating or editing YAML-only integrations that have no config flow (e.g. `command_line`, platform-based `mqtt`, `rest`) |
|
|
142
155
|
| [device-control](references/device-control.md) | Writing actions, button/remote automations, or using target: |
|
|
143
|
-
| [scenes](references/scenes.md) | Authoring or activating scenes; snapshot/restore patterns; snapshot-vs-script distinction |
|
|
156
|
+
| [scenes](references/scenes.md) | Authoring or activating scenes; snapshot/restore patterns, including putting devices back the way they were after a temporary change; snapshot-vs-script distinction |
|
|
144
157
|
| [dashboard-guide](references/dashboard-guide.md) | Designing or modifying Lovelace dashboards — layout, view types, strategies, sections, cards, badges, CSS styling, HACS |
|
|
145
158
|
| [dashboard-cards](references/dashboard-cards.md) | Looking up available card types or fetching card-specific documentation |
|
|
146
159
|
| [domain-docs](references/domain-docs.md) | Looking up integration/domain documentation, or the dedicated doc page for a specific trigger, condition, or action |
|