ha-mcp-dev 8.0.0.dev2209__tar.gz → 8.0.0.dev2212__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.
Files changed (194) hide show
  1. {ha_mcp_dev-8.0.0.dev2209/src/ha_mcp_dev.egg-info → ha_mcp_dev-8.0.0.dev2212}/PKG-INFO +2 -2
  2. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/pyproject.toml +2 -2
  3. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/settings_ui/locales/README.md +22 -11
  4. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212/src/ha_mcp_dev.egg-info}/PKG-INFO +2 -2
  5. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp_dev.egg-info/requires.txt +1 -1
  6. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/LICENSE +0 -0
  7. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/MANIFEST.in +0 -0
  8. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/README.md +0 -0
  9. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/setup.cfg +0 -0
  10. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/__init__.py +0 -0
  11. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/__main__.py +0 -0
  12. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/_pypi_marker +0 -0
  13. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/_version.py +0 -0
  14. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/auth/__init__.py +0 -0
  15. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/auth/consent_form.py +0 -0
  16. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/auth/provider.py +0 -0
  17. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/backup_manager.py +0 -0
  18. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/browser_landing.py +0 -0
  19. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/client/__init__.py +0 -0
  20. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/client/rest_client.py +0 -0
  21. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/client/supervisor_client.py +0 -0
  22. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/client/websocket_client.py +0 -0
  23. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/client/websocket_listener.py +0 -0
  24. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/config.py +0 -0
  25. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
  26. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
  27. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
  28. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
  29. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
  30. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
  31. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/errors.py +0 -0
  32. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/llm_exposure.py +0 -0
  33. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/policy/__init__.py +0 -0
  34. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/policy/approval_queue.py +0 -0
  35. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/policy/evaluator.py +0 -0
  36. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/policy/handlers.py +0 -0
  37. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/policy/middleware.py +0 -0
  38. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/policy/model.py +0 -0
  39. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/policy/persistence.py +0 -0
  40. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/policy/value_sources.py +0 -0
  41. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/py.typed +0 -0
  42. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/read_only.py +0 -0
  43. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
  44. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
  45. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
  46. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
  47. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/resources/skills-vendor/.github/pull_request_template.md +0 -0
  48. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
  49. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
  50. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
  51. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  52. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
  53. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  54. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/evals/evals.json +0 -0
  55. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
  56. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
  57. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
  58. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  59. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  60. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  61. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  62. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  63. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  64. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  65. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
  66. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  67. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
  68. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/server.py +0 -0
  69. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/settings_ui/__init__.py +0 -0
  70. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
  71. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
  72. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
  73. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
  74. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
  75. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
  76. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/settings_ui/_i18n.py +0 -0
  77. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/settings_ui/_persistence.py +0 -0
  78. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
  79. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/settings_ui/_theme.py +0 -0
  80. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
  81. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/settings_ui/locales/de.json +0 -0
  82. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/settings_ui/locales/en.json +0 -0
  83. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/settings_ui/locales/es.json +0 -0
  84. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
  85. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/settings_ui/locales/it.json +0 -0
  86. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
  87. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
  88. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/settings_ui/settings.css +0 -0
  89. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/settings_ui/settings.html +0 -0
  90. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/settings_ui/settings.js +0 -0
  91. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/smoke_test.py +0 -0
  92. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  93. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/strict_bps.py +0 -0
  94. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/__init__.py +0 -0
  95. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/auto_backup.py +0 -0
  96. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/backup.py +0 -0
  97. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  98. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/best_practice_result.py +0 -0
  99. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/best_practice_variables.py +0 -0
  100. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/component_api.py +0 -0
  101. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/component_config_reads.py +0 -0
  102. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/component_devices.py +0 -0
  103. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/component_registries.py +0 -0
  104. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
  105. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/config_entry_flow.py +0 -0
  106. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/device_control.py +0 -0
  107. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/helpers.py +0 -0
  108. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/radio/__init__.py +0 -0
  109. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/radio/base.py +0 -0
  110. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/radio/matter.py +0 -0
  111. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/radio/thread.py +0 -0
  112. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/radio/zigbee.py +0 -0
  113. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/radio/zwave.py +0 -0
  114. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/reference_validator.py +0 -0
  115. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/registry.py +0 -0
  116. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  117. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  118. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  119. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
  120. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  121. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  122. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  123. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  124. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  125. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
  126. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/tools_addons.py +0 -0
  127. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/tools_areas.py +0 -0
  128. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  129. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  130. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/tools_calendar.py +0 -0
  131. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/tools_camera.py +0 -0
  132. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/tools_categories.py +0 -0
  133. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/tools_code.py +0 -0
  134. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/tools_config_automations.py +0 -0
  135. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
  136. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  137. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
  138. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
  139. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
  140. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/tools_dev.py +0 -0
  141. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/tools_energy.py +0 -0
  142. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/tools_entities.py +0 -0
  143. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  144. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/tools_groups.py +0 -0
  145. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/tools_hacs.py +0 -0
  146. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/tools_history.py +0 -0
  147. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/tools_integrations.py +0 -0
  148. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/tools_labels.py +0 -0
  149. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/tools_radio.py +0 -0
  150. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/tools_registry.py +0 -0
  151. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/tools_resources.py +0 -0
  152. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/tools_search.py +0 -0
  153. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/tools_service.py +0 -0
  154. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/tools_services.py +0 -0
  155. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/tools_system.py +0 -0
  156. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/tools_themes.py +0 -0
  157. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/tools_todo.py +0 -0
  158. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/tools_traces.py +0 -0
  159. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/tools_updates.py +0 -0
  160. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/tools_utility.py +0 -0
  161. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  162. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  163. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
  164. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/tools_zones.py +0 -0
  165. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/util_helpers.py +0 -0
  166. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/tools/validation_middleware.py +0 -0
  167. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/transforms/__init__.py +0 -0
  168. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/transforms/categorized_search.py +0 -0
  169. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  170. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/transport_security.py +0 -0
  171. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/update_check.py +0 -0
  172. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/utils/__init__.py +0 -0
  173. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/utils/config_hash.py +0 -0
  174. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/utils/config_write_lock.py +0 -0
  175. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/utils/data_paths.py +0 -0
  176. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/utils/domain_handlers.py +0 -0
  177. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  178. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  179. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/utils/operation_manager.py +0 -0
  180. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/utils/python_sandbox.py +0 -0
  181. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/utils/skill_loader.py +0 -0
  182. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/utils/usage_logger.py +0 -0
  183. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/visibility/__init__.py +0 -0
  184. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/visibility/enforcement.py +0 -0
  185. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/visibility/model.py +0 -0
  186. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/visibility/persistence.py +0 -0
  187. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp/visibility/resolver.py +0 -0
  188. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp_dev.egg-info/SOURCES.txt +0 -0
  189. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
  190. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
  191. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
  192. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/tests/__init__.py +0 -0
  193. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/tests/test_constants.py +0 -0
  194. {ha_mcp_dev-8.0.0.dev2209 → ha_mcp_dev-8.0.0.dev2212}/tests/test_env_manager.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ha-mcp-dev
3
- Version: 8.0.0.dev2209
3
+ Version: 8.0.0.dev2212
4
4
  Summary: Home Assistant MCP Server - Complete control of Home Assistant through MCP
5
5
  Author-email: Julien <github@qc-h.net>
6
6
  License: MIT
@@ -19,7 +19,7 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
19
19
  Requires-Python: <3.15,>=3.13
20
20
  Description-Content-Type: text/markdown
21
21
  License-File: LICENSE
22
- Requires-Dist: fastmcp==3.4.4
22
+ Requires-Dist: fastmcp==3.4.5
23
23
  Requires-Dist: httpx[socks]==0.28.1
24
24
  Requires-Dist: pydantic==2.13.4
25
25
  Requires-Dist: python-dotenv==1.2.2
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "8.0.0.dev2209"
7
+ version = "8.0.0.dev2212"
8
8
  description = "Home Assistant MCP Server - Complete control of Home Assistant through MCP"
9
9
  readme = "README.md"
10
10
  # Upper bound widened to <3.15 so the package installs on Home Assistant's
@@ -28,7 +28,7 @@ classifiers = [
28
28
  ]
29
29
 
30
30
  dependencies = [
31
- "fastmcp==3.4.4",
31
+ "fastmcp==3.4.5",
32
32
  "httpx[socks]==0.28.1",
33
33
  "pydantic==2.13.4",
34
34
  "python-dotenv==1.2.2",
@@ -25,10 +25,12 @@ Home Assistant language code names every file:
25
25
  - `homeassistant-addon-dev/translations/<code>.yaml` (generated)
26
26
 
27
27
  Add the two authored catalogs — this one may start as a `meta`-only stub
28
- (`native_name`, `dir`) — then run `python scripts/generate_locales.py` and let
29
- `scripts/translate_locales.py` (or the `locale-sync.yml` workflow on the PR)
30
- machine-fill every string; review its output like any other diff. Also
31
- add the new code to the locale list in the repository-root `AGENTS.md`
28
+ (`native_name`, `dir`) — then run `python scripts/generate_locales.py` and
29
+ merge: the post-merge `locale-sync.yml` workflow machine-fills every string
30
+ over its next daily runs. To fill them in your own PR instead, run
31
+ `scripts/translate_locales.py` yourself and review its output like any
32
+ other diff. Also add the new code to the locale list in the repository-root
33
+ `AGENTS.md`
32
34
  § Translations — that list is pinned by
33
35
  `test_agents_md_lists_every_shipped_locale`. The engine reads the target
34
36
  language from `meta.native_name`, so any language an LLM can write — natural
@@ -69,21 +71,30 @@ import, so the failure names the file but arrives as a broken test module:
69
71
 
70
72
  ## What CI checks
71
73
 
74
+ In PR CI (`tests/src/unit/test_locale_parity.py`, ungated):
75
+
72
76
  - Every surface carries the same set of language codes.
73
- - `tool_groups` and `tools` name exactly the renderable groups and tools — a
74
- tool added to the codebase turns every locale red in the PR that adds it.
77
+ - The generated files (both add-on YAMLs, `FEATURE_META`) are byte-exact
78
+ generator output (`test_derived_catalogs_match_the_canonical_store`); run
79
+ `python scripts/generate_locales.py` after touching any `addon.*`,
80
+ `addon_stable.*` or `features.*` key.
81
+ - Component-catalog `{placeholder}` parity, for keys whose English still
82
+ matches the baseline — a hand edit that drops a placeholder fails the PR
83
+ that makes it; a translation awaiting a machine rewrite is excluded.
84
+
85
+ In the post-merge `locale-sync.yml` workflow only (the same test file, gated
86
+ behind `LOCALE_COMPLETENESS_CHECKS=1` — a PR that changes English merges
87
+ without these, and the daily sync owes them afterwards):
88
+
89
+ - `tool_groups` and `tools` name exactly the renderable groups and tools.
75
90
  - At most 5% of this catalog's `messages`, and 5% of its `tools` texts, may be
76
91
  byte-identical to English or missing outright; the component catalogs allow
77
92
  15%, because they carry product names as keys of their own. A single tool
78
93
  whose `title` *and* `description` are both still English fails by name
79
94
  however small the share.
80
- - The generated files (both add-on YAMLs, `FEATURE_META`) are byte-exact
81
- generator output (`test_derived_catalogs_match_the_canonical_store`); run
82
- `python scripts/generate_locales.py` after touching any `addon.*`,
83
- `addon_stable.*` or `features.*` key.
84
95
  - The English each translation was written against is hashed in
85
96
  `tests/src/unit/locale_source_baseline.json`, so a later edit to an English
86
- string turns the locales red rather than leaving them silently stale —
97
+ string reads as stale rather than silently keeping the old meaning —
87
98
  `scripts/translate_locales.py` retranslates exactly those keys and repins
88
99
  the baseline. Adding a language does not change any English source, so no
89
100
  baseline regeneration is needed for it.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ha-mcp-dev
3
- Version: 8.0.0.dev2209
3
+ Version: 8.0.0.dev2212
4
4
  Summary: Home Assistant MCP Server - Complete control of Home Assistant through MCP
5
5
  Author-email: Julien <github@qc-h.net>
6
6
  License: MIT
@@ -19,7 +19,7 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
19
19
  Requires-Python: <3.15,>=3.13
20
20
  Description-Content-Type: text/markdown
21
21
  License-File: LICENSE
22
- Requires-Dist: fastmcp==3.4.4
22
+ Requires-Dist: fastmcp==3.4.5
23
23
  Requires-Dist: httpx[socks]==0.28.1
24
24
  Requires-Dist: pydantic==2.13.4
25
25
  Requires-Dist: python-dotenv==1.2.2
@@ -1,4 +1,4 @@
1
- fastmcp==3.4.4
1
+ fastmcp==3.4.5
2
2
  httpx[socks]==0.28.1
3
3
  pydantic==2.13.4
4
4
  python-dotenv==1.2.2