Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
dfb8e6a
Make Elgato key light snappier (#176071)
joostlek Jul 9, 2026
c90358a
Bump pyimouapi to 1.3.0 (#176070)
Imou-OpenPlatform Jul 9, 2026
52ce20b
Skip whitespace-only content when converting Anthropic chat log (#175…
slettmayer Jul 9, 2026
8e3288e
Move Profiler services to async_setup (#175478)
erwindouna Jul 9, 2026
a09569d
Bump docker/setup-buildx-action from 4.1.0 to 4.2.0 (#176064)
dependabot[bot] Jul 9, 2026
f84af82
Portainer refactor setup with lightweigth API call (#173036)
erwindouna Jul 9, 2026
6ecf0f2
Bump dorny/paths-filter from 4.0.1 to 4.0.2 (#176061)
dependabot[bot] Jul 9, 2026
ee9933e
Move Shopping List services to async_setup (#175477)
erwindouna Jul 9, 2026
bc0412e
Move Rachio services to async_setup (#175479)
erwindouna Jul 9, 2026
4a915cc
Use last_changed_timestamp directly in history_stats (#175528)
frenck Jul 9, 2026
7043ec0
Have the Assist API get its tools and prompt from the llm integration…
balloob Jul 9, 2026
0145096
Fix HmIP-FLC door opener button to work for non-admin clients (#171060)
lackas Jul 9, 2026
b0ed415
Move ecobee services to async_setup (#175480)
erwindouna Jul 9, 2026
5292eb2
MELCloud Home add missing test coverage (#176029)
erwindouna Jul 9, 2026
73b065a
Switchbot Cloud: Enable Webhook for Smart Lock (#175925)
XiaoLing-git Jul 9, 2026
33d8a2a
MELCloud Home add number platform (#174552)
erwindouna Jul 9, 2026
cf54970
Fix garbled Z-Wave discovery card titles (#176055)
balloob Jul 9, 2026
baf50c7
Fix inverted My position number for Overkiz covers (#174414)
iMicknl Jul 9, 2026
d289d44
Add radar loop duration and frame rate options to Environment Canada …
michaeldavie Jul 9, 2026
4e76a28
Use Attribute enum in media_player (#175375)
epenet Jul 9, 2026
a86c7d3
Bump aiosomecomfort to 0.0.38 (#176081)
mkmer Jul 9, 2026
29b4acd
Key UniFi Protect public event subscriptions by device id (#175356)
RaHehl Jul 9, 2026
95a34c1
Add latest Orbi Wi-Fi 7 routers to V2 models (#175062)
natekspencer Jul 9, 2026
a6dfbae
Migrate UniFi Protect HDR mode select to the public API (#174965)
RaHehl Jul 9, 2026
c7e8e12
Add velbus-handler to velbus integration loggers (#174904)
StefCoene Jul 9, 2026
2e39fdd
Move formatting of aqvify API arguments to lib (#174522)
astrandb Jul 9, 2026
22edf15
Enable oscillation for VeSync pedestal fans (LPF-R432S) (#175300)
matthw-labs Jul 9, 2026
6009f3e
Update Yardian switch to use stop_zone (#174558)
aeon-matrix Jul 9, 2026
32c149b
Reset API on integration reloads for Sonos (#172350)
PeteRager Jul 9, 2026
a816278
MELCloud Home add min and max temperature (#174838)
erwindouna Jul 9, 2026
4be0cdc
Improve Tesla Wall Connector device info (#176013)
sarabveer Jul 9, 2026
498c086
Map ViCare cooling operating mode to HVACMode.COOL (#174490)
lackas Jul 9, 2026
212ac7a
Track nobo_hub connectivity (#170726)
oyvindwe Jul 9, 2026
0d6081a
Add restore to fan template entities (#175292)
Petro31 Jul 9, 2026
145ffc1
Bump docker/login-action from 4.2.0 to 4.3.0 (#176062)
dependabot[bot] Jul 9, 2026
85b90e2
Bump github/codeql-action/init from 4.36.2 to 4.36.3 (#176060)
dependabot[bot] Jul 9, 2026
6006e7d
Bump github/codeql-action/analyze from 4.36.2 to 4.36.3 (#176063)
dependabot[bot] Jul 9, 2026
8daccee
Bump docker/metadata-action from 6.1.0 to 6.2.0 (#176059)
dependabot[bot] Jul 9, 2026
3f01488
(Re) add missing WeatherFlow UDP sensors (#171856)
inventor7777 Jul 9, 2026
d32cf45
Sanitize add-on name in Supervisor backup filenames (#175267)
agners Jul 9, 2026
68c17fb
Add restore to device_tracker template entities (#175262)
Petro31 Jul 9, 2026
a271bac
Add restore to cover template entities (#175216)
Petro31 Jul 9, 2026
0a1c74e
Namespace llm helper singleton key to avoid domain collision (#176101)
balloob Jul 9, 2026
8048257
Ensure Netatmo unique config entry (#176079)
cgtobi Jul 9, 2026
cdca91c
Remove orphan hass.data access in Tankerkoenig (#176112)
mib1185 Jul 9, 2026
991612a
Drop redundant MotionDetectorPushButton dispatch in HmIP Cloud sensor…
lackas Jul 9, 2026
14121e2
Migrate friend accounts to subentries in Steam integration (#175048)
tr4nt0r Jul 9, 2026
7933901
Add swing mode select entities for gree integration (#169169)
greengreenblue Jul 9, 2026
834cb45
Trigger reauth on Teslemetry LoginRequired errors (#174255)
Bre77 Jul 9, 2026
9bec46d
Add Kiosker Reauthentication (#174440)
Claeysson Jul 9, 2026
1b64480
Fix flaky remote_calendar coordinator refresh test (#176078)
balloob Jul 9, 2026
705f515
Refresh hassio coordinator after OS update install (#176004)
agners Jul 9, 2026
7a91656
Fix pause before Assist response on ESPHome Assist satelites (#173712)
matt123p Jul 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions .github/workflows/builder.yml
Original file line number Diff line number Diff line change
Expand Up @@ -342,13 +342,13 @@ jobs:

- name: Login to DockerHub
if: matrix.registry == 'docker.io/homeassistant'
uses: docker/login-action@650006c6eb7dba73a995cc03b0b2d7f5ca915bee # v4.2.0
uses: docker/login-action@c99871dec2022cc055c062a10cc1a1310835ceb4 # v4.3.0
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}

- name: Login to GitHub Container Registry
uses: docker/login-action@650006c6eb7dba73a995cc03b0b2d7f5ca915bee # v4.2.0
uses: docker/login-action@c99871dec2022cc055c062a10cc1a1310835ceb4 # v4.3.0
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
Expand Down Expand Up @@ -378,7 +378,7 @@ jobs:
# 2025.12.0.dev202511250240 -> tags: 2025.12.0.dev202511250240, dev
- name: Generate Docker metadata
id: meta
uses: docker/metadata-action@80c7e94dd9b9319bd5eb7a0e0fe9291e23a2a2e9 # v6.1.0
uses: docker/metadata-action@dc802804100637a589fabce1cb79ff13a1411302 # v6.2.0
with:
images: ${{ matrix.registry }}/home-assistant
sep-tags: ","
Expand All @@ -392,7 +392,7 @@ jobs:
type=semver,pattern={{major}}.{{minor}},value=${{ needs.init.outputs.version }},enable=${{ !contains(needs.init.outputs.version, 'd') && !contains(needs.init.outputs.version, 'b') }}

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@d7f5e7f509e45cec5c76c4d5afdd7de93d0b3df5 # v3.7.1
uses: docker/setup-buildx-action@bb05f3f5519dd87d3ba754cc423b652a5edd6d2c # v3.7.1

- name: Copy architecture images to DockerHub
if: matrix.registry == 'docker.io/homeassistant'
Expand Down Expand Up @@ -521,7 +521,7 @@ jobs:
persist-credentials: false

- name: Login to GitHub Container Registry
uses: docker/login-action@650006c6eb7dba73a995cc03b0b2d7f5ca915bee # v4.2.0
uses: docker/login-action@c99871dec2022cc055c062a10cc1a1310835ceb4 # v4.3.0
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ jobs:
# of a new uv cache entry after a version bump.
echo "key=venv-${CACHE_VERSION}-${HA_SHORT_VERSION}-${HASH_REQUIREMENTS_TEST}-${HASH_REQUIREMENTS}-${HASH_REQUIREMENTS_ALL}-${HASH_PACKAGE_CONSTRAINTS}-${HASH_GEN_REQUIREMENTS}" >> $GITHUB_OUTPUT
- name: Filter for core changes
uses: dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # v4.0.1
uses: dorny/paths-filter@7b450fff21473bca461d4b92ce414b9d0420d706 # v4.0.2
id: core
with:
filters: .core_files.yaml
Expand All @@ -131,7 +131,7 @@ jobs:
echo "Result:"
cat .integration_paths.yaml
- name: Filter for integration changes
uses: dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # v4.0.1
uses: dorny/paths-filter@7b450fff21473bca461d4b92ce414b9d0420d706 # v4.0.2
id: integrations
with:
filters: .integration_paths.yaml
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,11 @@ jobs:
persist-credentials: false

- name: Initialize CodeQL
uses: github/codeql-action/init@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4.36.2
uses: github/codeql-action/init@54f647b7e1bb85c95cddabcd46b0c578ec92bc1a # v4.36.3
with:
languages: python

- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4.36.2
uses: github/codeql-action/analyze@54f647b7e1bb85c95cddabcd46b0c578ec92bc1a # v4.36.3
with:
category: "/language:python"
4 changes: 2 additions & 2 deletions CODEOWNERS

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

25 changes: 21 additions & 4 deletions homeassistant/components/anthropic/entity.py
Original file line number Diff line number Diff line change
Expand Up @@ -233,8 +233,9 @@ def _convert_content( # noqa: C901
"""Transform HA chat_log content into Anthropic API format."""
messages: list[MessageParam] = []
container_id: str | None = None
contents = list(chat_content)

for content in chat_content:
for index, content in enumerate(contents):
if isinstance(content, conversation.ToolResultContent):
external_tool = True
if content.tool_name == "web_search":
Expand Down Expand Up @@ -322,14 +323,26 @@ def _convert_content( # noqa: C901
else:
messages[-1]["content"].append(tool_result_block) # type: ignore[attr-defined]
elif isinstance(content, conversation.UserContent):
has_text = bool(content.content.strip())
# Attachments are only appended to the last message afterwards, so
# an empty message is only useful for attachments if it is last
has_attachments = bool(content.attachments) and index == len(contents) - 1
if not has_text and not has_attachments:
# The API rejects whitespace-only text blocks and empty
# messages, so drop content that carries neither text nor
# usable attachments
continue
# Combine consequent user messages
if not messages or messages[-1]["role"] != "user":
messages.append(
MessageParam(
role="user",
content=content.content,
content=content.content if has_text else [],
)
)
elif not has_text:
# Attachments are appended to the last user message later
continue
elif isinstance(messages[-1]["content"], str):
messages[-1]["content"] = [
TextBlockParam(type="text", text=messages[-1]["content"]),
Expand Down Expand Up @@ -375,7 +388,7 @@ def _convert_content( # noqa: C901
):
container_id = content.native.container.id

if content.content:
if content.content and content.content.strip():
current_index = 0
for detail in (
content.native.citation_details
Expand Down Expand Up @@ -455,7 +468,11 @@ def _convert_content( # noqa: C901
]
)

if (
if not messages[-1]["content"]:
# Drop assistant messages that ended up without any content
# (e.g. whitespace-only text): the API rejects empty messages
messages.pop()
elif (
isinstance(messages[-1]["content"], list)
and len(messages[-1]["content"]) == 1
and messages[-1]["content"][0]["type"] == "text"
Expand Down
13 changes: 3 additions & 10 deletions homeassistant/components/aqvify/coordinator.py
Original file line number Diff line number Diff line change
Expand Up @@ -201,22 +201,15 @@ def __init__(

self.api_client = api_client

@staticmethod
def _get_times() -> tuple[str, str]:
"""Determine strings for time parameters for aggregated data from API."""
date_time_fmt = "%Y-%m-%dT%H:%MZ"
base_time = utcnow() - timedelta(hours=1)
beg_time = base_time.replace(minute=0).strftime(date_time_fmt)
end_time = base_time.replace(minute=59).strftime(date_time_fmt)
return beg_time, end_time

@override
async def _async_update_data(self) -> dict[str, AqvifyHourAggregatedValues]:
"""Fetch device state."""
devices = self.config_entry.runtime_data.coordinator.data.devices

device_data: dict[str, AqvifyHourAggregatedValues] = {}
beg_time, end_time = self._get_times()
base_time = utcnow() - timedelta(hours=1)
beg_time = base_time.replace(minute=0, second=0, microsecond=0)
end_time = base_time.replace(minute=59, second=0, microsecond=0)
for device in devices.devices.values():
device_key = device.device_key
if TYPE_CHECKING:
Expand Down
2 changes: 1 addition & 1 deletion homeassistant/components/conversation/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"domain": "conversation",
"name": "Conversation",
"codeowners": ["@home-assistant/core", "@synesthesiam", "@arturpragacz"],
"dependencies": ["http", "intent"],
"dependencies": ["http", "intent", "llm"],
"documentation": "https://www.home-assistant.io/integrations/conversation",
"integration_type": "entity",
"quality_scale": "internal",
Expand Down
11 changes: 11 additions & 0 deletions homeassistant/components/ecobee/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,15 +22,26 @@
ConfigEntryError,
ConfigEntryNotReady,
)
from homeassistant.helpers import config_validation as cv
from homeassistant.helpers.typing import ConfigType
from homeassistant.util import Throttle

from .const import _LOGGER, CONF_REFRESH_TOKEN, DOMAIN, PLATFORMS
from .services import async_setup_services

MIN_TIME_BETWEEN_UPDATES = timedelta(seconds=180)

CONFIG_SCHEMA = cv.config_entry_only_config_schema(DOMAIN)

type EcobeeConfigEntry = ConfigEntry[EcobeeData]


async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
"""Set up the ecobee integration."""
async_setup_services(hass)
return True


async def async_setup_entry(hass: HomeAssistant, entry: EcobeeConfigEntry) -> bool:
"""Set up ecobee via a config entry."""
api_key = entry.data.get(CONF_API_KEY)
Expand Down
Loading
Loading