ha-mcp-dev 7.14.2.dev2165__tar.gz → 7.14.2.dev2167__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 (192) hide show
  1. {ha_mcp_dev-7.14.2.dev2165/src/ha_mcp_dev.egg-info → ha_mcp_dev-7.14.2.dev2167}/PKG-INFO +1 -1
  2. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/pyproject.toml +1 -1
  3. ha_mcp_dev-7.14.2.dev2167/src/ha_mcp/settings_ui/locales/README.md +96 -0
  4. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167/src/ha_mcp_dev.egg-info}/PKG-INFO +1 -1
  5. ha_mcp_dev-7.14.2.dev2165/src/ha_mcp/settings_ui/locales/README.md +0 -18
  6. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/LICENSE +0 -0
  7. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/MANIFEST.in +0 -0
  8. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/README.md +0 -0
  9. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/setup.cfg +0 -0
  10. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/__init__.py +0 -0
  11. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/__main__.py +0 -0
  12. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/_pypi_marker +0 -0
  13. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/_version.py +0 -0
  14. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/auth/__init__.py +0 -0
  15. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/auth/consent_form.py +0 -0
  16. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/auth/provider.py +0 -0
  17. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/backup_manager.py +0 -0
  18. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/browser_landing.py +0 -0
  19. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/client/__init__.py +0 -0
  20. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/client/rest_client.py +0 -0
  21. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/client/supervisor_client.py +0 -0
  22. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/client/websocket_client.py +0 -0
  23. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/client/websocket_listener.py +0 -0
  24. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/config.py +0 -0
  25. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
  26. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
  27. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
  28. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
  29. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
  30. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
  31. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/errors.py +0 -0
  32. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/llm_exposure.py +0 -0
  33. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/policy/__init__.py +0 -0
  34. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/policy/approval_queue.py +0 -0
  35. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/policy/evaluator.py +0 -0
  36. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/policy/handlers.py +0 -0
  37. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/policy/middleware.py +0 -0
  38. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/policy/model.py +0 -0
  39. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/policy/persistence.py +0 -0
  40. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/policy/value_sources.py +0 -0
  41. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/py.typed +0 -0
  42. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/read_only.py +0 -0
  43. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
  44. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
  45. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
  46. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
  47. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/resources/skills-vendor/.github/pull_request_template.md +0 -0
  48. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
  49. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
  50. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
  51. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  52. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
  53. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  54. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/evals/evals.json +0 -0
  55. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
  56. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
  57. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
  58. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  59. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  60. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  61. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  62. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  63. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  64. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  65. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
  66. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  67. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
  68. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/server.py +0 -0
  69. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/settings_ui/__init__.py +0 -0
  70. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
  71. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
  72. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
  73. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
  74. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
  75. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
  76. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/settings_ui/_i18n.py +0 -0
  77. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/settings_ui/_persistence.py +0 -0
  78. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
  79. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/settings_ui/_theme.py +0 -0
  80. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
  81. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/settings_ui/locales/de.json +0 -0
  82. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/settings_ui/locales/en.json +0 -0
  83. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/settings_ui/locales/es.json +0 -0
  84. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
  85. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
  86. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
  87. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/settings_ui/settings.css +0 -0
  88. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/settings_ui/settings.html +0 -0
  89. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/settings_ui/settings.js +0 -0
  90. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/smoke_test.py +0 -0
  91. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  92. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/strict_bps.py +0 -0
  93. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/__init__.py +0 -0
  94. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/auto_backup.py +0 -0
  95. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/backup.py +0 -0
  96. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  97. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/component_api.py +0 -0
  98. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/component_config_reads.py +0 -0
  99. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/component_devices.py +0 -0
  100. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/component_registries.py +0 -0
  101. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
  102. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/config_entry_flow.py +0 -0
  103. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/device_control.py +0 -0
  104. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/helpers.py +0 -0
  105. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/radio/__init__.py +0 -0
  106. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/radio/base.py +0 -0
  107. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/radio/matter.py +0 -0
  108. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/radio/thread.py +0 -0
  109. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/radio/zigbee.py +0 -0
  110. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/radio/zwave.py +0 -0
  111. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/reference_validator.py +0 -0
  112. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/registry.py +0 -0
  113. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  114. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  115. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  116. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
  117. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  118. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  119. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  120. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  121. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  122. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
  123. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/tools_addons.py +0 -0
  124. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/tools_areas.py +0 -0
  125. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  126. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  127. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/tools_calendar.py +0 -0
  128. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/tools_camera.py +0 -0
  129. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/tools_categories.py +0 -0
  130. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/tools_code.py +0 -0
  131. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/tools_config_automations.py +0 -0
  132. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
  133. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  134. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
  135. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
  136. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
  137. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/tools_dev.py +0 -0
  138. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/tools_energy.py +0 -0
  139. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/tools_entities.py +0 -0
  140. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  141. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/tools_groups.py +0 -0
  142. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/tools_hacs.py +0 -0
  143. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/tools_history.py +0 -0
  144. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/tools_integrations.py +0 -0
  145. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/tools_labels.py +0 -0
  146. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/tools_radio.py +0 -0
  147. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/tools_registry.py +0 -0
  148. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/tools_resources.py +0 -0
  149. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/tools_search.py +0 -0
  150. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/tools_service.py +0 -0
  151. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/tools_services.py +0 -0
  152. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/tools_system.py +0 -0
  153. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/tools_themes.py +0 -0
  154. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/tools_todo.py +0 -0
  155. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/tools_traces.py +0 -0
  156. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/tools_updates.py +0 -0
  157. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/tools_utility.py +0 -0
  158. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  159. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  160. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
  161. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/tools_zones.py +0 -0
  162. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/util_helpers.py +0 -0
  163. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/tools/validation_middleware.py +0 -0
  164. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/transforms/__init__.py +0 -0
  165. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/transforms/categorized_search.py +0 -0
  166. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  167. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/transport_security.py +0 -0
  168. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/update_check.py +0 -0
  169. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/utils/__init__.py +0 -0
  170. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/utils/config_hash.py +0 -0
  171. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/utils/config_write_lock.py +0 -0
  172. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/utils/data_paths.py +0 -0
  173. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/utils/domain_handlers.py +0 -0
  174. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  175. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  176. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/utils/operation_manager.py +0 -0
  177. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/utils/python_sandbox.py +0 -0
  178. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/utils/skill_loader.py +0 -0
  179. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/utils/usage_logger.py +0 -0
  180. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/visibility/__init__.py +0 -0
  181. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/visibility/enforcement.py +0 -0
  182. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/visibility/model.py +0 -0
  183. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/visibility/persistence.py +0 -0
  184. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp/visibility/resolver.py +0 -0
  185. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp_dev.egg-info/SOURCES.txt +0 -0
  186. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
  187. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
  188. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
  189. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
  190. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/tests/__init__.py +0 -0
  191. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/tests/test_constants.py +0 -0
  192. {ha_mcp_dev-7.14.2.dev2165 → ha_mcp_dev-7.14.2.dev2167}/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: 7.14.2.dev2165
3
+ Version: 7.14.2.dev2167
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
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "7.14.2.dev2165"
7
+ version = "7.14.2.dev2167"
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
@@ -0,0 +1,96 @@
1
+ # Settings UI translations
2
+
3
+ The settings page discovers every `*.json` catalog in this directory. No Python
4
+ or JavaScript registration is required, and no packaging file needs editing —
5
+ the wheel, sdist and binary declarations all match this directory by pattern.
6
+
7
+ ## Adding a language
8
+
9
+ A language ships on **all four** translated surfaces or not at all, and one
10
+ Home Assistant language code names every file:
11
+
12
+ - `src/ha_mcp/settings_ui/locales/<code>.json` (this directory)
13
+ - `custom_components/ha_mcp_tools/translations/<code>.json`
14
+ - `homeassistant-addon/translations/<code>.yaml`
15
+ - `homeassistant-addon-dev/translations/<code>.yaml`
16
+
17
+ Adding only this catalog fails `test_every_locale_ships_on_every_surface`. Also
18
+ add the new code to the locale list in the repository-root `AGENTS.md`
19
+ § Translations — that list is pinned by
20
+ `test_agents_md_lists_every_shipped_locale`.
21
+
22
+ Only the first of those four files is described below, and the other three
23
+ carry content rules of their own: the component catalog needs every `en.json`
24
+ key with identical `{placeholders}` and no extra ones, and each add-on YAML
25
+ needs a `name` and a `description` for every `schema:` key of *that* flavor's
26
+ `config.yaml`, with nothing left behind for a key the schema no longer
27
+ declares. The two flavors declare different schemas, so neither YAML is a copy
28
+ of the other. The repository-root `AGENTS.md` § Translations states all of
29
+ this; a contributor who writes only this catalog goes red on the other three.
30
+
31
+ **Start from a translated catalog, not from `en.json`.** English for the tool
32
+ titles and descriptions comes from the tool definitions at runtime, so `en.json`
33
+ ships `tools` and `tool_groups` empty; a copy of it is missing both sections
34
+ that this catalog is required to carry.
35
+
36
+ **Read the other surfaces before you word a switch.** Wherever the same English
37
+ text is shipped from more than one catalog, your wording has to be byte-identical
38
+ in all of them. That is not only the add-on-options-versus-settings-UI axis: the
39
+ two add-on flavors describe most of the same options, so a good part of the
40
+ pinned parity is stable-against-dev, with no settings-UI text involved at all.
41
+ Translating one surface at a time is exactly how one option ends up with two
42
+ different sentences.
43
+
44
+ ## Catalog sections
45
+
46
+ - `meta.native_name`: language name shown in the selector. It must be
47
+ non-empty, must not repeat English's own name, and must differ from every
48
+ other catalog's — a copied catalog that keeps the name it was copied from
49
+ fails `test_native_names_name_their_own_language`, because the picker would
50
+ then offer one label twice.
51
+ - `meta.dir`: `ltr` or `rtl`. Omitting it means `ltr`; any other value is
52
+ rejected when the catalog loads.
53
+ - `messages`: interface labels, help text, notices, and runtime messages. Keys
54
+ may be omitted — English is the per-key fallback at runtime — but see the
55
+ share limit below before leaving a catalog half-finished.
56
+ - `tool_groups`: one entry per renderable MCP tool tag, keyed by the English
57
+ tag. Not optional, and exact: no key more and none fewer.
58
+ - `tools`: `title` and `description` per tool, keyed by the stable MCP tool
59
+ name. The key set is not optional and exact in the same way; either field on
60
+ its own may be left out, but a missing one counts as untranslated against the
61
+ share limit below.
62
+
63
+ Keep the keys and `{placeholders}` unchanged in every section.
64
+
65
+ `messages` values carry two further rules, both enforced when the catalog
66
+ loads rather than by a named test — breaking one raises a `ValueError` at
67
+ import, so the failure names the file but arrives as a broken test module:
68
+
69
+ - The only inline markup the page can restore is `<code>`, `<strong>`, `</a>`
70
+ and `<a href="#" data-panel-link="...">`, spelled exactly that way. Any other
71
+ tag — `<b>`, `<CODE>`, `<code >` — is rejected.
72
+ - A `data-panel-link` target must be a tab the settings page declares, and a
73
+ translated message must link to the same tabs as its English source, with
74
+ the same multiplicity. The order may differ, so a translation is free to
75
+ reorder two links to suit its grammar.
76
+
77
+ ## What CI checks
78
+
79
+ - Every surface carries the same set of language codes.
80
+ - `tool_groups` and `tools` name exactly the renderable groups and tools — a
81
+ tool added to the codebase turns every locale red in the PR that adds it.
82
+ - At most 5% of this catalog's `messages`, and 5% of its `tools` texts, may be
83
+ byte-identical to English or missing outright. Both add-on flavors are held to
84
+ the same 5%; the component catalogs allow 15%, because they carry product
85
+ names as keys of their own. A single tool whose `title` *and* `description` are
86
+ both still English fails by name however small the share.
87
+ - One wording per English string across surfaces, wherever the same English text
88
+ is shipped from more than one catalog. The failure names every group that
89
+ disagrees. Where a group has a settings UI member, that is the wording the
90
+ other surfaces follow today; a group carried only by the two add-on flavors
91
+ has no such member, so there pick one wording and use it in both.
92
+ - The English each translation was written against is hashed in
93
+ `tests/src/unit/locale_source_baseline.json`, so a later edit to an English
94
+ string turns the locales red rather than leaving them silently stale. Adding a
95
+ language does not change any English source, so no baseline regeneration is
96
+ needed for it.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ha-mcp-dev
3
- Version: 7.14.2.dev2165
3
+ Version: 7.14.2.dev2167
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
@@ -1,18 +0,0 @@
1
- # Settings UI translations
2
-
3
- The settings page discovers every `*.json` catalog in this directory. To add a
4
- language, copy `en.json`, rename it to the language code (for example
5
- `it.json`), translate the values, and keep the keys and `{placeholders}`
6
- unchanged. No Python or JavaScript registration is required.
7
-
8
- Catalog sections:
9
-
10
- - `meta.native_name`: language name shown in the selector.
11
- - `meta.dir`: `ltr` or `rtl`.
12
- - `messages`: interface labels, help text, notices, and runtime messages.
13
- - `tool_groups`: optional translations keyed by the English MCP tool tag.
14
- - `tools`: optional per-tool `title` and `description` overrides keyed by the
15
- stable MCP tool name. Missing values fall back to the server-provided English.
16
-
17
- English is always the fallback, so an incomplete catalog remains usable while
18
- it is being expanded.