Commit Graph

3726 Commits

Author SHA1 Message Date
dependabot[bot]
4613a18590 GitHub Actions: Bump ruby/setup-ruby from 1.276.0 to 1.278.0 in the dependencies group (#4153)
Bumps the dependencies group with 1 update:
[ruby/setup-ruby](https://github.com/ruby/setup-ruby).

Updates `ruby/setup-ruby` from 1.276.0 to 1.278.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/ruby/setup-ruby/releases">ruby/setup-ruby's
releases</a>.</em></p>
<blockquote>
<h2>v1.278.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Set BUNDLER_VERSION whenever we know which version to use by <a
href="https://github.com/eregon"><code>@​eregon</code></a> in <a
href="https://redirect.github.com/ruby/setup-ruby/pull/849">ruby/setup-ruby#849</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/ruby/setup-ruby/compare/v1.277.0...v1.278.0">https://github.com/ruby/setup-ruby/compare/v1.277.0...v1.278.0</a></p>
<h2>v1.277.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Update CRuby releases on Windows by <a
href="https://github.com/ruby-builder-bot"><code>@​ruby-builder-bot</code></a>
in <a
href="https://redirect.github.com/ruby/setup-ruby/pull/847">ruby/setup-ruby#847</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/ruby/setup-ruby/compare/v1.276.0...v1.277.0">https://github.com/ruby/setup-ruby/compare/v1.276.0...v1.277.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="4c24fa5ec0"><code>4c24fa5</code></a>
Set BUNDLER_VERSION whenever we know which version to use</li>
<li><a
href="8a836efbce"><code>8a836ef</code></a>
Update CRuby releases on Windows</li>
<li>See full diff in <a
href="ae195bbe74...4c24fa5ec0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=ruby/setup-ruby&package-manager=github_actions&previous-version=1.276.0&new-version=1.278.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-05 11:46:48 +01:00
Bruno Pantaleão Gonçalves
1da8113507 Sync network info before performing intents (#4147)
Added calls to syncNetworkInformation() at the start of various
perform() methods for AppIntents and widget controls to ensure
up-to-date connectivity data before executing actions. Also refactored
ConnectivityWrapper to support async network info synchronization.

<!-- Thank you for submitting a Pull Request and helping to improve Home
Assistant. Please complete the following sections to help the processing
and review of your changes. Please do not delete anything from this
template. -->

## Summary
<!-- Provide a brief summary of the changes you have made and most
importantly what they aim to achieve -->

## Screenshots
<!-- If this is a user-facing change not in the frontend, please include
screenshots in light and dark mode. -->

## Link to pull request in Documentation repository
<!-- Pull requests that add, change or remove functionality must have a
corresponding pull request in the Companion App Documentation repository
(https://github.com/home-assistant/companion.home-assistant). Please add
the number of this pull request after the "#" -->
Documentation: home-assistant/companion.home-assistant#

## Any other notes
<!-- If there is any other information of note, like if this Pull
Request is part of a bigger change, please include it here. -->

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-12-29 12:50:47 +00:00
dependabot[bot]
990427c1e7 GitHub Actions: Bump ruby/setup-ruby from 1.275.0 to 1.276.0 in the dependencies group (#4146)
Bumps the dependencies group with 1 update:
[ruby/setup-ruby](https://github.com/ruby/setup-ruby).

Updates `ruby/setup-ruby` from 1.275.0 to 1.276.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/ruby/setup-ruby/releases">ruby/setup-ruby's
releases</a>.</em></p>
<blockquote>
<h2>v1.276.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Add ruby-4.0.0 by <a
href="https://github.com/ruby-builder-bot"><code>@​ruby-builder-bot</code></a>
in <a
href="https://redirect.github.com/ruby/setup-ruby/pull/844">ruby/setup-ruby#844</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/ruby/setup-ruby/compare/v1.275.0...v1.276.0">https://github.com/ruby/setup-ruby/compare/v1.275.0...v1.276.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="ae195bbe74"><code>ae195bb</code></a>
Add ruby-4.0.0</li>
<li>See full diff in <a
href="d354de180d...ae195bbe74">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=ruby/setup-ruby&package-manager=github_actions&previous-version=1.275.0&new-version=1.276.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-29 10:21:35 +01:00
github-actions[bot]
317d9ecaf9 Update Localized Strings (#4141)
Automatically created by zacwest.

Co-authored-by: Home Assistant Bot <hello@home-assistant.io>
2025-12-29 09:49:13 +01:00
Bruno Pantaleão Gonçalves
53312192b7 Refactor AssistWavesAnimation to use animated bars (#4143)
Replaces the previous static circle-based animation with a dynamic,
reusable WaveBar component that animates capsule-shaped bars with
staggered delays and randomized durations for a more organic effect.
Adds a glowing background for visual enhancement and improves code
modularity and readability.

<!-- Thank you for submitting a Pull Request and helping to improve Home
Assistant. Please complete the following sections to help the processing
and review of your changes. Please do not delete anything from this
template. -->

## Summary
<!-- Provide a brief summary of the changes you have made and most
importantly what they aim to achieve -->

## Screenshots


https://github.com/user-attachments/assets/53f755e9-1e68-47d9-a9d9-cd98e723dd71



## Link to pull request in Documentation repository
<!-- Pull requests that add, change or remove functionality must have a
corresponding pull request in the Companion App Documentation repository
(https://github.com/home-assistant/companion.home-assistant). Please add
the number of this pull request after the "#" -->
Documentation: home-assistant/companion.home-assistant#

## Any other notes
<!-- If there is any other information of note, like if this Pull
Request is part of a bigger change, please include it here. -->
2025-12-23 17:53:20 +00:00
Bruno Pantaleão Gonçalves
f823d8936f Experimental Assist UI (#4139)
<!-- Thank you for submitting a Pull Request and helping to improve Home
Assistant. Please complete the following sections to help the processing
and review of your changes. Please do not delete anything from this
template. -->

## Summary
<!-- Provide a brief summary of the changes you have made and most
importantly what they aim to achieve -->

## Screenshots
<!-- If this is a user-facing change not in the frontend, please include
screenshots in light and dark mode. -->
<img width="1776" height="1124" alt="CleanShot 2025-12-23 at 03 29
25@2x"
src="https://github.com/user-attachments/assets/ab1a5c9f-72a9-4dc8-ae44-1f7d574738f6"
/>

## Link to pull request in Documentation repository
<!-- Pull requests that add, change or remove functionality must have a
corresponding pull request in the Companion App Documentation repository
(https://github.com/home-assistant/companion.home-assistant). Please add
the number of this pull request after the "#" -->
Documentation: home-assistant/companion.home-assistant#

## Any other notes
<!-- If there is any other information of note, like if this Pull
Request is part of a bigger change, please include it here. -->

---------

Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
2025-12-23 15:38:35 +00:00
Bruno Pantaleão Gonçalves
86e1c83a41 Sort by areas and allow reordering cameras (#4135)
<!-- Thank you for submitting a Pull Request and helping to improve Home
Assistant. Please complete the following sections to help the processing
and review of your changes. Please do not delete anything from this
template. -->

## Summary
<!-- Provide a brief summary of the changes you have made and most
importantly what they aim to achieve -->

## Screenshots
<!-- If this is a user-facing change not in the frontend, please include
screenshots in light and dark mode. -->
<img width="3534" height="1398" alt="CleanShot 2025-12-22 at 15 54
51@2x"
src="https://github.com/user-attachments/assets/9512eb8a-0005-4c51-9cae-93b68e6a3ec4"
/>

## Link to pull request in Documentation repository
<!-- Pull requests that add, change or remove functionality must have a
corresponding pull request in the Companion App Documentation repository
(https://github.com/home-assistant/companion.home-assistant). Please add
the number of this pull request after the "#" -->
Documentation: home-assistant/companion.home-assistant#

## Any other notes
<!-- If there is any other information of note, like if this Pull
Request is part of a bigger change, please include it here. -->
2025-12-22 15:47:24 +00:00
github-actions[bot]
f9814fcf8a Update Localized Strings (#4125)
Automatically created by bgoncal.

---------

Co-authored-by: Home Assistant Bot <hello@home-assistant.io>
Co-authored-by: Bruno Pantaleão Gonçalves <5808343+bgoncal@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-12-22 16:15:07 +01:00
Copilot
61ffd969f0 Remove 37 unused localization strings (#4131)
## Summary
Removes 37 unused localization string keys that were detected as
unreferenced across the codebase. Affected strings span onboarding
flows, settings UI, thread credentials, widgets, and root-level labels.

**Removed keys by category:**
- **Onboarding**: `device_name_check.error.rename_action`, location
permission buttons (`allow_and_share`, `allow_for_app`, `deny`),
`permission.location.privacy_note`, `scanning.manual_hint`,
`welcome.continue_button`, `welcome.get_started`
- **Settings**: `connection_section.activate_swipe_hint`,
`connection_section.invite_to_server`,
`connection_section.ssid_permission_message`,
`always_fallback_internal.confirmation.confirm_button`,
`reset_section.reset_alert.progress_message`, `server_select.page_title`
- **Settings Details**: App icon enums (`ha_blue`,
`pride_rainbow_invert`), `privacy.crash_reporting.sentry`
- **Thread**: All credential screen labels (`border_agent_id_title`,
`network_key_title`, `network_name_title`, `no_credential_available`,
`screen_title`, `share_credentials_button_title`)
- **Widgets**: `details.parameters.run_action`,
`gauge.parameters.run_action`
- **Watch**: `labels.no_action`
- **Root level**: `off_label`, `on_label`, `reload_label`,
`success_label`, `username_label`
- **Other**: `about.logo.tagline`,
`announcement.drop_support.button_read_more`,
`connection.permission.internal_url` (body3, button_configure,
button_ignore), `improv.connection_state.autorization_required`

**Changes:**
- Removed 1,258 key-value pairs across 34 language
`.lproj/Localizable.strings` files
- Removed 76 lines from
`Sources/Shared/Resources/Swiftgen/Strings.swift` (corresponding L10n
property declarations)

Verified with `Tools/detect_unused_strings.py` - zero unused strings
remain.

## Screenshots
N/A - No user-facing changes (removes unused code only)

## Link to pull request in Documentation repository
N/A

## Any other notes
Detection was performed using the existing `detect_unused_strings.py`
tool which checks for L10n property usage across all Swift source files.

<!-- START COPILOT CODING AGENT SUFFIX -->



<!-- START COPILOT ORIGINAL PROMPT -->



<details>

<summary>Original prompt</summary>

> Remove strings detected as unused:
> 
> Found 37 unused strings:
> 
> 
> ABOUT:
>   - L10n.About.Logo.tagline
>     Key: about.logo.tagline
>     Line: 130
> 
> ANNOUNCEMENT:
>   - L10n.Announcement.DropSupport.buttonReadMore
>     Key: announcement.drop_support.button_read_more
>     Line: 276
> 
> CONNECTION:
>   - L10n.Connection.Permission.InternalUrl.body3
>     Key: connection.permission.internal_url.body3
>     Line: 927
>   - L10n.Connection.Permission.InternalUrl.buttonConfigure
>     Key: connection.permission.internal_url.button_configure
>     Line: 929
>   - L10n.Connection.Permission.InternalUrl.buttonIgnore
>     Key: connection.permission.internal_url.button_ignore
>     Line: 931
> 
> IMPROV:
>   - L10n.Improv.ConnectionState.autorizationRequired
>     Key: improv.connection_state.autorization_required
>     Line: 1296
> 
> ONBOARDING:
>   - L10n.Onboarding.DeviceNameCheck.Error.renameAction
>     Key: onboarding.device_name_check.error.rename_action
>     Line: 1892
>   - L10n.Onboarding.Permission.Location.Buttons.allowAndShare
>     Key: onboarding.permission.location.buttons.allow_and_share
>     Line: 2064
>   - L10n.Onboarding.Permission.Location.Buttons.allowForApp
>     Key: onboarding.permission.location.buttons.allow_for_app
>     Line: 2066
>   - L10n.Onboarding.Permission.Location.Buttons.deny
>     Key: onboarding.permission.location.buttons.deny
>     Line: 2068
>   - L10n.Onboarding.Permission.Location.privacyNote
>     Key: onboarding.permission.location.privacy_note
>     Line: 2061
>   - L10n.Onboarding.Scanning.manualHint
>     Key: onboarding.scanning.manual_hint
>     Line: 2162
>   - L10n.Onboarding.Welcome.continueButton
>     Key: onboarding.welcome.continue_button
>     Line: 2200
>   - L10n.Onboarding.Welcome.getStarted
>     Key: onboarding.welcome.get_started
>     Line: 2206
> 
> SETTINGS:
> -
L10n.Settings.ConnectionSection.AlwaysFallbackInternal.Confirmation.confirmButton
> Key:
settings.connection_section.always_fallback_internal.confirmation.confirm_button
>     Line: 2329
>   - L10n.Settings.ConnectionSection.activateSwipeHint
>     Key: settings.connection_section.activate_swipe_hint
>     Line: 2293
>   - L10n.Settings.ConnectionSection.inviteToServer
>     Key: settings.connection_section.invite_to_server
>     Line: 2307
>   - L10n.Settings.ConnectionSection.ssidPermissionMessage
>     Key: settings.connection_section.ssid_permission_message
>     Line: 2321
>   - L10n.Settings.ResetSection.ResetAlert.progressMessage
>     Key: settings.reset_section.reset_alert.progress_message
>     Line: 2654
>   - L10n.Settings.ServerSelect.pageTitle
>     Key: settings.server_select.page_title
>     Line: 2673
> 
> SETTINGSDETAILS:
>   - L10n.SettingsDetails.General.AppIcon.Enum.haBlue
>     Key: settings_details.general.app_icon.enum.ha_blue
>     Line: 2840
>   - L10n.SettingsDetails.General.AppIcon.Enum.prideRainbowInvert
>     Key: settings_details.general.app_icon.enum.pride_rainbow_invert
>     Line: 2860
>   - L10n.SettingsDetails.Privacy.CrashReporting.sentry
>     Key: settings_details.privacy.crash_reporting.sentry
>     Line: 3299
> 
> THREAD:
>   - L10n.Thread.Credentials.borderAgentIdTitle
>     Key: thread.credentials.border_agent_id_title
>     Line: 3432
>   - L10n.Thread.Credentials.networkKeyTitle
>     Key: thread.credentials.network_key_title
>     Line: 3434
>   - L10n.Thread.Credentials.networkNameTitle
>     Key: thread.credentials.network_name_title
>     Line: 3436
>   - L10n.Thread.Credentials.noCredentialAvailable
>     Key: thread.credentials.no_credential_available
>     Line: 3438
>   - L10n.Thread.Credentials.screenTitle
>     Key: thread.credentials.screen_title
>     Line: 3440
>   - L10n.Thread.Credentials.shareCredentialsButtonTitle
>     Key: thread.credentials.share_credentials_button_title
>     Line: 3442
> 
> WATCH:
>   - L10n.Watch.Labels.noAction
>     Key: watch.labels.no_action
>     Line: 3925
> 
> WIDGETS:
>   - L10n.Widgets.Details.Parameters.runAction
>     Key: widgets.details.parameters.run_action
>     Line: 4746
>   - L10n.Widgets.Gauge.Parameters.runAction
>     Key: widgets.gauge.parameters.run_action
>     Line: 4778
> 
> ROOT:
>   - L10n.offLabel
>     Key: off_label
>     Line: 38
>   - L10n.onLabel
>     Key: on_label
>     Line: 42
>   - L10n.reloadLabel
>     Key: reload_label
>     Line: 50
>   - L10n.successLabel
>     Key: success_label
>     Line: 60
>   - L10n.usernameLabel
>     Key: username_label
>     Line: 66


</details>



<!-- START COPILOT CODING AGENT TIPS -->
---

 Let Copilot coding agent [set things up for
you](https://github.com/home-assistant/iOS/issues/new?title=+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot)
— coding agent works faster and does higher quality work when set up for
your repo.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: bgoncal <5808343+bgoncal@users.noreply.github.com>
2025-12-22 14:53:26 +01:00
Copilot
dd1dd76458 Remove unused strings cleanup automation (#4130)
## Summary
Removes the automated cleanup tooling for unused localization strings.
The detection script and CI checks remain to identify unused strings,
but removal is now a manual process.

**Deleted:**
- `Tools/remove_unused_strings.py` - Script that removed unused strings
from all `Localizable.strings` files
- `.github/workflows/clean_unused_strings.yml` - Monthly workflow that
created automated cleanup PRs

**Updated:**
- `Tools/README.md` - Removed `remove_unused_strings.py` documentation
- `UNUSED_STRINGS.md` - Removed removal script and workflow
documentation; renamed to focus on detection only
- `.github/workflows/ci.yml` - Updated PR comment to suggest manual
cleanup instead of referencing removed script

The `detect_unused_strings.py` script and CI integration continue to
function unchanged.

## Screenshots
N/A - No user-facing changes

## Link to pull request in Documentation repository
Documentation: home-assistant/companion.home-assistant#

## Any other notes
Detection of unused strings remains automated via CI checks on pull
requests. Only the removal automation has been eliminated.

<!-- START COPILOT CODING AGENT SUFFIX -->



<!-- START COPILOT ORIGINAL PROMPT -->



<details>

<summary>Original prompt</summary>

> Delete remove_unused_strings.py and workflow


</details>



<!-- START COPILOT CODING AGENT TIPS -->
---

💬 We'd love your input! Share your thoughts on Copilot coding agent in
our [2 minute survey](https://gh.io/copilot-coding-agent-survey).

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: bgoncal <5808343+bgoncal@users.noreply.github.com>
2025-12-22 12:01:46 +00:00
Copilot
7ab7aa095d Add camera list screen with server filtering, area display, and iOS 18+ control widgets (#4118)
## Summary

Implements a camera list view accessible from iOS 18+ control widgets
and deeplinks, displaying all cameras from the database with server
filtering, area information, and search capabilities. Tapping a camera
opens the WebRTC video player in full screen on top of the list.

**New Components:**
- `CameraListView` - SwiftUI list with conditional server selector,
search, area display, and empty states
- `CameraListViewModel` - Fetches cameras via `ControlEntityProvider`,
handles filtering, and maps camera areas
- `OpenCameraListAppIntent` - iOS 18+ app intent for opening camera list
- `ControlOpenCamerasList` - iOS 18+ control widget for Control Center
(no configuration needed)

**Key Features:**
- **Server Picker**: Hidden when initialized with specific serverId,
always visible otherwise
- **Area Display**: Shows area name (if available) or entity ID for each
camera
- **Full Screen Behavior**: Camera opens on top of list modal without
dismissing it
- **Search**: Real-time filtering by camera name or entity ID
- **Localization**: All user-facing strings use the localization system
(`L10n.CameraList.*`)
- **Control Widgets**: Two iOS 18+ widgets for Control Center access

**iOS 18+ Control Widgets:**
1. **ControlOpenCamerasList** - Opens the full camera list with one tap
(static, no configuration)
2. **ControlOpenCamera** - Opens a specific camera directly (user
selects camera during setup)

**URL Routing:**
- `homeassistant://camera/` → Opens camera list
- `homeassistant://camera/?serverId={id}` → Opens filtered list (hides
server picker)
- `homeassistant://camera/?entityId={id}&serverId={id}` → Opens specific
camera (existing)

Updated `IncomingURLHandler.swift` to branch on `entityId` presence:
missing opens list, present opens player.

**Localization Keys:**
- `camera_list.title` - Navigation title
- `camera_list.search_placeholder` - Search bar placeholder
- `camera_list.empty.title` & `camera_list.empty.message` - Empty state
- `camera_list.no_results.title` & `camera_list.no_results.message` - No
search results
- `widgets.controls.open_cameras_list.description` - Control widget
description

**Tests:**
- Updated `WidgetsKindTests` to include assertion for
`controlOpenCamerasList` enum case
- Total enum case count updated from 26 to 27

## Screenshots

_Screenshots required for testing on macOS/iOS device_

## Link to pull request in Documentation repository

Documentation: home-assistant/companion.home-assistant#

## Any other notes

Files added to both App and Extensions-Widgets targets for proper iOS
18+ control support. Backward compatible with existing camera deeplinks.
ViewModel fetches area information from the database and maps it to
cameras for display. All strings are properly localized and ready for
translation.

The `ControlOpenCamerasList` widget uses `StaticControlConfiguration`,
requiring no user setup, making it quick to add to Control Center for
instant access to all cameras.

Tests have been updated to reflect the new `controlOpenCamerasList`
widget kind after merging with main branch changes.

<!-- START COPILOT CODING AGENT SUFFIX -->



<!-- START COPILOT ORIGINAL PROMPT -->



<details>

<summary>Original prompt</summary>

> In the App we have the options to open WebRTCVideoPlayerView from iOS
18+ controls, implement a screen that presents a list of cameras base on
all cameras in the database.
> This screen should have a server selector as well and it should allow
initializing with a specific serverId, so the list is displayed based on
1 server only.
> When tapping list row, it opens WebRTCVideoPlayerView for that
selected camera in full screen


</details>



<!-- START COPILOT CODING AGENT TIPS -->
---

 Let Copilot coding agent [set things up for
you](https://github.com/home-assistant/iOS/issues/new?title=+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot)
— coding agent works faster and does higher quality work when set up for
your repo.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: bgoncal <5808343+bgoncal@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-12-22 11:57:45 +00:00
Bruno Pantaleão Gonçalves
77e4af6c0a Reduce CI timeout from 60 to 45 minutes (#4129)
<!-- Thank you for submitting a Pull Request and helping to improve Home
Assistant. Please complete the following sections to help the processing
and review of your changes. Please do not delete anything from this
template. -->

## Summary
<!-- Provide a brief summary of the changes you have made and most
importantly what they aim to achieve -->

## Screenshots
<!-- If this is a user-facing change not in the frontend, please include
screenshots in light and dark mode. -->

## Link to pull request in Documentation repository
<!-- Pull requests that add, change or remove functionality must have a
corresponding pull request in the Companion App Documentation repository
(https://github.com/home-assistant/companion.home-assistant). Please add
the number of this pull request after the "#" -->
Documentation: home-assistant/companion.home-assistant#

## Any other notes
<!-- If there is any other information of note, like if this Pull
Request is part of a bigger change, please include it here. -->
2025-12-22 11:57:03 +00:00
dependabot[bot]
e3262a1744 GitHub Actions: Bump the dependencies group with 3 updates (#4124)
Bumps the dependencies group with 3 updates:
[ruby/setup-ruby](https://github.com/ruby/setup-ruby),
[actions/setup-python](https://github.com/actions/setup-python) and
[peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request).

Updates `ruby/setup-ruby` from 1.270.0 to 1.275.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/ruby/setup-ruby/releases">ruby/setup-ruby's
releases</a>.</em></p>
<blockquote>
<h2>v1.275.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Skip saving cache for merge_group event by <a
href="https://github.com/ntkme"><code>@​ntkme</code></a> in <a
href="https://redirect.github.com/ruby/setup-ruby/pull/812">ruby/setup-ruby#812</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/ruby/setup-ruby/compare/v1.274.0...v1.275.0">https://github.com/ruby/setup-ruby/compare/v1.274.0...v1.275.0</a></p>
<h2>v1.274.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Fix rubyinstaller2 urls for latest release by <a
href="https://github.com/zenspider"><code>@​zenspider</code></a> in <a
href="https://redirect.github.com/ruby/setup-ruby/pull/842">ruby/setup-ruby#842</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/zenspider"><code>@​zenspider</code></a>
made their first contribution in <a
href="https://redirect.github.com/ruby/setup-ruby/pull/842">ruby/setup-ruby#842</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/ruby/setup-ruby/compare/v1.273.0...v1.274.0">https://github.com/ruby/setup-ruby/compare/v1.273.0...v1.274.0</a></p>
<h2>v1.273.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Update CRuby releases on Windows by <a
href="https://github.com/ruby-builder-bot"><code>@​ruby-builder-bot</code></a>
in <a
href="https://redirect.github.com/ruby/setup-ruby/pull/840">ruby/setup-ruby#840</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/ruby/setup-ruby/compare/v1.272.0...v1.273.0">https://github.com/ruby/setup-ruby/compare/v1.272.0...v1.273.0</a></p>
<h2>v1.272.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Add ruby-4.0.0-preview3 by <a
href="https://github.com/ruby-builder-bot"><code>@​ruby-builder-bot</code></a>
in <a
href="https://redirect.github.com/ruby/setup-ruby/pull/839">ruby/setup-ruby#839</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/ruby/setup-ruby/compare/v1.271.0...v1.272.0">https://github.com/ruby/setup-ruby/compare/v1.271.0...v1.272.0</a></p>
<h2>v1.271.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Add ruby-3.4.8 by <a
href="https://github.com/ruby-builder-bot"><code>@​ruby-builder-bot</code></a>
in <a
href="https://redirect.github.com/ruby/setup-ruby/pull/838">ruby/setup-ruby#838</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/ruby/setup-ruby/compare/v1.270.0...v1.271.0">https://github.com/ruby/setup-ruby/compare/v1.270.0...v1.271.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="d354de180d"><code>d354de1</code></a>
Skip saving cache for merge_group event</li>
<li><a
href="ed55d55e82"><code>ed55d55</code></a>
Fix rubyinstaller2 urls for latest release</li>
<li><a
href="a25f1e45f0"><code>a25f1e4</code></a>
Update CRuby releases on Windows</li>
<li><a
href="211ffaaa5f"><code>211ffaa</code></a>
Add ruby-4.0.0-preview3</li>
<li><a
href="f8d7259c7a"><code>f8d7259</code></a>
Add ruby-3.4.8</li>
<li>See full diff in <a
href="ac793fdd38...d354de180d">compare
view</a></li>
</ul>
</details>
<br />

Updates `actions/setup-python` from 5.2.0 to 6.1.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/setup-python/releases">actions/setup-python's
releases</a>.</em></p>
<blockquote>
<h2>v6.1.0</h2>
<h2>What's Changed</h2>
<h3>Enhancements:</h3>
<ul>
<li>Add support for <code>pip-install</code> input by <a
href="https://github.com/gowridurgad"><code>@​gowridurgad</code></a> in
<a
href="https://redirect.github.com/actions/setup-python/pull/1201">actions/setup-python#1201</a></li>
<li>Add graalpy early-access and windows builds by <a
href="https://github.com/timfel"><code>@​timfel</code></a> in <a
href="https://redirect.github.com/actions/setup-python/pull/880">actions/setup-python#880</a></li>
</ul>
<h3>Dependency and Documentation updates:</h3>
<ul>
<li>Enhanced wording and updated example usage for
<code>allow-prereleases</code> by <a
href="https://github.com/yarikoptic"><code>@​yarikoptic</code></a> in <a
href="https://redirect.github.com/actions/setup-python/pull/979">actions/setup-python#979</a></li>
<li>Upgrade urllib3 from 1.26.19 to 2.5.0 and document breaking changes
in v6 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/actions/setup-python/pull/1139">actions/setup-python#1139</a></li>
<li>Upgrade typescript from 5.4.2 to 5.9.3 and Documentation update by
<a href="https://github.com/dependabot"><code>@​dependabot</code></a> in
<a
href="https://redirect.github.com/actions/setup-python/pull/1094">actions/setup-python#1094</a></li>
<li>Upgrade actions/publish-action from 0.3.0 to 0.4.0 &amp;
Documentation update for pip-install input by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/actions/setup-python/pull/1199">actions/setup-python#1199</a></li>
<li>Upgrade requests from 2.32.2 to 2.32.4 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/actions/setup-python/pull/1130">actions/setup-python#1130</a></li>
<li>Upgrade prettier from 3.5.3 to 3.6.2 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/actions/setup-python/pull/1234">actions/setup-python#1234</a></li>
<li>Upgrade <code>@​types/node</code> from 24.1.0 to 24.9.1 and update
macos-13 to macos-15-intel by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/actions/setup-python/pull/1235">actions/setup-python#1235</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/yarikoptic"><code>@​yarikoptic</code></a> made
their first contribution in <a
href="https://redirect.github.com/actions/setup-python/pull/979">actions/setup-python#979</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/setup-python/compare/v6...v6.1.0">https://github.com/actions/setup-python/compare/v6...v6.1.0</a></p>
<h2>v6.0.0</h2>
<h2>What's Changed</h2>
<h3>Breaking Changes</h3>
<ul>
<li>Upgrade to node 24 by <a
href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
href="https://redirect.github.com/actions/setup-python/pull/1164">actions/setup-python#1164</a></li>
</ul>
<p>Make sure your runner is on version v2.327.1 or later to ensure
compatibility with this release. <a
href="https://github.com/actions/runner/releases/tag/v2.327.1">See
Release Notes</a></p>
<h3>Enhancements:</h3>
<ul>
<li>Add support for <code>pip-version</code> by <a
href="https://github.com/priyagupta108"><code>@​priyagupta108</code></a>
in <a
href="https://redirect.github.com/actions/setup-python/pull/1129">actions/setup-python#1129</a></li>
<li>Enhance reading from .python-version by <a
href="https://github.com/krystof-k"><code>@​krystof-k</code></a> in <a
href="https://redirect.github.com/actions/setup-python/pull/787">actions/setup-python#787</a></li>
<li>Add version parsing from Pipfile by <a
href="https://github.com/aradkdj"><code>@​aradkdj</code></a> in <a
href="https://redirect.github.com/actions/setup-python/pull/1067">actions/setup-python#1067</a></li>
</ul>
<h3>Bug fixes:</h3>
<ul>
<li>Clarify pythonLocation behaviour for PyPy and GraalPy in environment
variables by <a
href="https://github.com/aparnajyothi-y"><code>@​aparnajyothi-y</code></a>
in <a
href="https://redirect.github.com/actions/setup-python/pull/1183">actions/setup-python#1183</a></li>
<li>Change missing cache directory error to warning by <a
href="https://github.com/aparnajyothi-y"><code>@​aparnajyothi-y</code></a>
in <a
href="https://redirect.github.com/actions/setup-python/pull/1182">actions/setup-python#1182</a></li>
<li>Add Architecture-Specific PATH Management for Python with --user
Flag on Windows by <a
href="https://github.com/aparnajyothi-y"><code>@​aparnajyothi-y</code></a>
in <a
href="https://redirect.github.com/actions/setup-python/pull/1122">actions/setup-python#1122</a></li>
<li>Include python version in PyPy python-version output by <a
href="https://github.com/cdce8p"><code>@​cdce8p</code></a> in <a
href="https://redirect.github.com/actions/setup-python/pull/1110">actions/setup-python#1110</a></li>
<li>Update docs: clarification on pip authentication with setup-python
by <a
href="https://github.com/priya-kinthali"><code>@​priya-kinthali</code></a>
in <a
href="https://redirect.github.com/actions/setup-python/pull/1156">actions/setup-python#1156</a></li>
</ul>
<h3>Dependency updates:</h3>
<ul>
<li>Upgrade idna from 2.9 to 3.7 in /<strong>tests</strong>/data by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/actions/setup-python/pull/843">actions/setup-python#843</a></li>
<li>Upgrade form-data to fix critical vulnerabilities <a
href="https://redirect.github.com/actions/setup-python/issues/182">#182</a>
&amp; <a
href="https://redirect.github.com/actions/setup-python/issues/183">#183</a>
by <a
href="https://github.com/aparnajyothi-y"><code>@​aparnajyothi-y</code></a>
in <a
href="https://redirect.github.com/actions/setup-python/pull/1163">actions/setup-python#1163</a></li>
<li>Upgrade setuptools to 78.1.1 to fix path traversal vulnerability in
PackageIndex.download by <a
href="https://github.com/aparnajyothi-y"><code>@​aparnajyothi-y</code></a>
in <a
href="https://redirect.github.com/actions/setup-python/pull/1165">actions/setup-python#1165</a></li>
<li>Upgrade actions/checkout from 4 to 5 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/actions/setup-python/pull/1181">actions/setup-python#1181</a></li>
<li>Upgrade <code>@​actions/tool-cache</code> from 2.0.1 to 2.0.2 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/actions/setup-python/pull/1095">actions/setup-python#1095</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/krystof-k"><code>@​krystof-k</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/setup-python/pull/787">actions/setup-python#787</a></li>
<li><a href="https://github.com/cdce8p"><code>@​cdce8p</code></a> made
their first contribution in <a
href="https://redirect.github.com/actions/setup-python/pull/1110">actions/setup-python#1110</a></li>
<li><a href="https://github.com/aradkdj"><code>@​aradkdj</code></a> made
their first contribution in <a
href="https://redirect.github.com/actions/setup-python/pull/1067">actions/setup-python#1067</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/setup-python/compare/v5...v6.0.0">https://github.com/actions/setup-python/compare/v5...v6.0.0</a></p>
<h2>v5.6.0</h2>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="83679a892e"><code>83679a8</code></a>
Bump <code>@​types/node</code> from 24.1.0 to 24.9.1 and update macos-13
to macos-15-intel ...</li>
<li><a
href="bfc4944b43"><code>bfc4944</code></a>
Bump prettier from 3.5.3 to 3.6.2 (<a
href="https://redirect.github.com/actions/setup-python/issues/1234">#1234</a>)</li>
<li><a
href="97aeb3efb8"><code>97aeb3e</code></a>
Bump requests from 2.32.2 to 2.32.4 in /<strong>tests</strong>/data (<a
href="https://redirect.github.com/actions/setup-python/issues/1130">#1130</a>)</li>
<li><a
href="443da59188"><code>443da59</code></a>
Bump actions/publish-action from 0.3.0 to 0.4.0 &amp; Documentation
update for pi...</li>
<li><a
href="cfd55ca824"><code>cfd55ca</code></a>
graalpy: add graalpy early-access and windows builds (<a
href="https://redirect.github.com/actions/setup-python/issues/880">#880</a>)</li>
<li><a
href="bba65e51ff"><code>bba65e5</code></a>
Bump typescript from 5.4.2 to 5.9.3 and update docs/advanced-usage.md
(<a
href="https://redirect.github.com/actions/setup-python/issues/1094">#1094</a>)</li>
<li><a
href="18566f86b3"><code>18566f8</code></a>
Improve wording and &quot;fix example&quot; (remove 3.13) on testing
against pre-releas...</li>
<li><a
href="2e3e4b15a8"><code>2e3e4b1</code></a>
Add support for pip-install input (<a
href="https://redirect.github.com/actions/setup-python/issues/1201">#1201</a>)</li>
<li><a
href="4267e283df"><code>4267e28</code></a>
Bump urllib3 from 1.26.19 to 2.5.0 in /<strong>tests</strong>/data and
document breaking c...</li>
<li><a
href="e797f83bcb"><code>e797f83</code></a>
Upgrade to node 24 (<a
href="https://redirect.github.com/actions/setup-python/issues/1164">#1164</a>)</li>
<li>Additional commits viewable in <a
href="f677139bbe...83679a892e">compare
view</a></li>
</ul>
</details>
<br />

Updates `peter-evans/create-pull-request` from 7.0.5 to 8.0.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/peter-evans/create-pull-request/releases">peter-evans/create-pull-request's
releases</a>.</em></p>
<blockquote>
<h2>Create Pull Request v8.0.0</h2>
<h2>What's new in v8</h2>
<ul>
<li>Requires <a
href="https://github.com/actions/runner/releases/tag/v2.327.1">Actions
Runner v2.327.1</a> or later if you are using a self-hosted runner for
Node 24 support.</li>
</ul>
<h2>What's Changed</h2>
<ul>
<li>chore: Update checkout action version to v6 by <a
href="https://github.com/yonas"><code>@​yonas</code></a> in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4258">peter-evans/create-pull-request#4258</a></li>
<li>Update actions/checkout references to <a
href="https://github.com/v6"><code>@​v6</code></a> in docs by <a
href="https://github.com/Copilot"><code>@​Copilot</code></a> in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4259">peter-evans/create-pull-request#4259</a></li>
<li>feat: v8 by <a
href="https://github.com/peter-evans"><code>@​peter-evans</code></a> in
<a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4260">peter-evans/create-pull-request#4260</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/yonas"><code>@​yonas</code></a> made
their first contribution in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4258">peter-evans/create-pull-request#4258</a></li>
<li><a href="https://github.com/Copilot"><code>@​Copilot</code></a> made
their first contribution in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4259">peter-evans/create-pull-request#4259</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/peter-evans/create-pull-request/compare/v7.0.11...v8.0.0">https://github.com/peter-evans/create-pull-request/compare/v7.0.11...v8.0.0</a></p>
<h2>Create Pull Request v7.0.11</h2>
<h2>What's Changed</h2>
<ul>
<li>fix: restrict remote prune to self-hosted runners by <a
href="https://github.com/peter-evans"><code>@​peter-evans</code></a> in
<a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4250">peter-evans/create-pull-request#4250</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/peter-evans/create-pull-request/compare/v7.0.10...v7.0.11">https://github.com/peter-evans/create-pull-request/compare/v7.0.10...v7.0.11</a></p>
<h2>Create Pull Request v7.0.10</h2>
<p>⚙️ Fixes an issue where updating a pull request failed when targeting
a forked repository with the same owner as its parent.</p>
<h2>What's Changed</h2>
<ul>
<li>build(deps): bump the github-actions group with 2 updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4235">peter-evans/create-pull-request#4235</a></li>
<li>build(deps-dev): bump prettier from 3.6.2 to 3.7.3 in the npm group
by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4240">peter-evans/create-pull-request#4240</a></li>
<li>fix: provider list pulls fallback for multi fork same owner by <a
href="https://github.com/peter-evans"><code>@​peter-evans</code></a> in
<a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4245">peter-evans/create-pull-request#4245</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/obnyis"><code>@​obnyis</code></a> made
their first contribution in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4064">peter-evans/create-pull-request#4064</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/peter-evans/create-pull-request/compare/v7.0.9...v7.0.10">https://github.com/peter-evans/create-pull-request/compare/v7.0.9...v7.0.10</a></p>
<h2>Create Pull Request v7.0.9</h2>
<p>⚙️ Fixes an <a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4228">incompatibility</a>
with the recently released <code>actions/checkout@v6</code>.</p>
<h2>What's Changed</h2>
<ul>
<li>~70 dependency updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a></li>
<li>docs: fix workaround description about <code>ready_for_review</code>
by <a href="https://github.com/ybiquitous"><code>@​ybiquitous</code></a>
in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/3939">peter-evans/create-pull-request#3939</a></li>
<li>Docs: <code>add-paths</code> default behavior by <a
href="https://github.com/joeflack4"><code>@​joeflack4</code></a> in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/3928">peter-evans/create-pull-request#3928</a></li>
<li>docs: update to create-github-app-token v2 by <a
href="https://github.com/Goooler"><code>@​Goooler</code></a> in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4063">peter-evans/create-pull-request#4063</a></li>
<li>Fix compatibility with actions/checkout@v6 by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4230">peter-evans/create-pull-request#4230</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/joeflack4"><code>@​joeflack4</code></a>
made their first contribution in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/3928">peter-evans/create-pull-request#3928</a></li>
<li><a href="https://github.com/Goooler"><code>@​Goooler</code></a> made
their first contribution in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4063">peter-evans/create-pull-request#4063</a></li>
<li><a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> made
their first contribution in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4230">peter-evans/create-pull-request#4230</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="98357b18bf"><code>98357b1</code></a>
feat: v8 (<a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4260">#4260</a>)</li>
<li><a
href="41c0e4b789"><code>41c0e4b</code></a>
Update actions/checkout references to <a
href="https://github.com/v6"><code>@​v6</code></a> in docs (<a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4259">#4259</a>)</li>
<li><a
href="994332de4c"><code>994332d</code></a>
chore: Update checkout action version to v6 (<a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4258">#4258</a>)</li>
<li><a
href="22a9089034"><code>22a9089</code></a>
fix: restrict remote prune to self-hosted runners (<a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4250">#4250</a>)</li>
<li><a
href="d4f3be6ce6"><code>d4f3be6</code></a>
fix: provider list pulls fallback for multi fork same owner (<a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4245">#4245</a>)</li>
<li><a
href="bc8a47f565"><code>bc8a47f</code></a>
build(deps-dev): bump prettier from 3.6.2 to 3.7.3 in the npm group (<a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4240">#4240</a>)</li>
<li><a
href="a67ef28ca5"><code>a67ef28</code></a>
build(deps): bump the github-actions group with 2 updates (<a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4235">#4235</a>)</li>
<li><a
href="84ae59a2cd"><code>84ae59a</code></a>
fix: compatibility with actions/checkout@v6 (<a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4230">#4230</a>)</li>
<li><a
href="b4733b9419"><code>b4733b9</code></a>
build(deps-dev): bump js-yaml from 4.1.0 to 4.1.1 (<a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4222">#4222</a>)</li>
<li><a
href="0edc001d28"><code>0edc001</code></a>
build(deps-dev): bump the npm group with 2 updates (<a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4201">#4201</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/peter-evans/create-pull-request/compare/v7.0.5...98357b18bf14b5342f975ff684046ec3b2a07725">compare
view</a></li>
</ul>
</details>
<br />


Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-22 12:24:55 +01:00
Copilot
3f25cd80ab Add automation domain and iOS control widget (#4120)
## Summary

Adds support for Home Assistant automations in the iOS app. Automations
can now be triggered from iOS Control Center widgets (iOS 18+), similar
to existing script and scene controls.

**Domain & Model**
- Added `automation` domain with robot icon and `trigger` service
- Included automation in `AppEntitiesModel` tracked domains for database
caching
- Added to CarPlay supported domains

**Control Widget** (iOS 18+)
- `ControlAutomation` - Main control widget
- `AutomationAppIntent` - Triggers `automation.trigger` service
- `IntentAutomationEntity` - Entity queries and selection
- `ControlAutomationsValueProvider` - Configuration with custom
icons/text

**Pattern**
Follows existing `ControlScript` and `ControlScene` implementation
patterns for consistency.

**Tests**
- Updated `testWidgetsKindCasesValues` to include assertion for
`controlAutomation` case
- Updated widget kind count validation from 25 to 26

## Screenshots

N/A - Control widgets are system UI and cannot be screenshotted during
development. Widget appears in Control Center configuration with
automation icon and allows selection from available automations.

## Link to pull request in Documentation repository

Documentation: home-assistant/companion.home-assistant#

## Any other notes

Localization strings added for English only. Additional languages will
need translation via the standard localization workflow.

<!-- START COPILOT CODING AGENT SUFFIX -->



<!-- START COPILOT ORIGINAL PROMPT -->



<details>

<summary>Original prompt</summary>

> 1 - Add "automation" in AppEntitiesModel domains
> 2 - Create an iOS control for running automation like it exist for
ControlScript


</details>



<!-- START COPILOT CODING AGENT TIPS -->
---

 Let Copilot coding agent [set things up for
you](https://github.com/home-assistant/iOS/issues/new?title=+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot)
— coding agent works faster and does higher quality work when set up for
your repo.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: bgoncal <5808343+bgoncal@users.noreply.github.com>
2025-12-22 10:58:37 +00:00
Copilot
2b4ac9cd53 Fix authentication in clean_unused_strings workflow (#4122) 2025-12-21 19:44:19 +01:00
Copilot
69474acedd Fix clean_unused_strings workflow: Use macOS runner (#4121) 2025-12-21 17:14:20 +00:00
Copilot
d0e30e0c1a Add automated detection and cleanup of unused L10n strings (#4119)
## Summary

Implements automated detection and removal of unused localization
strings. Currently identifies 37 unused L10n properties across the
codebase (onboarding flows, settings, thread credentials, widgets,
etc.).

**Components:**

- **Detection script** (`Tools/detect_unused_strings.py`): Parses
`Strings.swift`, searches all Swift source for L10n property usage and
direct key references, reports unused strings grouped by category
- **Removal script** (`Tools/remove_unused_strings.py`): Deletes unused
keys from all `*.lproj/Localizable.strings` files, regenerates
`Strings.swift` via SwiftGen
- **CI check** (`check-unused-strings` job): Runs on PRs, posts sticky
comment with unused string count and details
- **Automated workflow** (`clean_unused_strings.yml`): Monthly scheduled
run + manual trigger, creates PR with cleanup changes

**Usage:**
```bash
# Detect unused strings
python3 Tools/detect_unused_strings.py

# Remove unused strings and regenerate code
python3 Tools/remove_unused_strings.py
```

## Screenshots

N/A - No UI changes

## Link to pull request in Documentation repository

Documentation: home-assistant/companion.home-assistant#

## Any other notes

The detection algorithm checks three patterns to minimize false
positives:
1. Full L10n path usage (`L10n.About.title`)
2. Leaf property usage (`.title`)
3. Direct Localizable key usage (`"about.title"`)

Modified `.gitignore` to allow Python scripts in Tools directory. All
changes pass yamllint and CodeQL security checks.

<!-- START COPILOT CODING AGENT SUFFIX -->



<!-- START COPILOT ORIGINAL PROMPT -->



<details>

<summary>Original prompt</summary>

> Tasks:
1 - Create a script that detects L10n (Strings.swift) unused
strings in the codebase
2 - From this list, extract the Localizable
string and double check if they are not used directly in the codebase
3
- If both are true, the script should delete these strings from all
localizable languages and L10n (Strings.swift)
> 4 - Add to the CI workflow a step which checks if that PR has unused
strings, if so, comment on the PR
5 - Create a workflow dedicated to
delete unused strings


</details>



<!-- START COPILOT CODING AGENT TIPS -->
---

💡 You can make Copilot smarter by setting up custom instructions,
customizing its development environment and configuring Model Context
Protocol (MCP) servers. Learn more [Copilot coding agent
tips](https://gh.io/copilot-coding-agent-tips) in the docs.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: bgoncal <5808343+bgoncal@users.noreply.github.com>
2025-12-21 15:57:53 +00:00
github-actions[bot]
31030a1144 Update Localized Strings (#4115)
Automatically created by zacwest.

Co-authored-by: Home Assistant Bot <hello@home-assistant.io>
2025-12-21 16:42:11 +01:00
Bruno Pantaleão Gonçalves
7119b8a557 Add fan domain to app database updater (#4114) 2025-12-19 09:46:08 +00:00
Copilot
6916e5437b Add fan entity type to Control Center controls (#4109)
## Summary
Adds fan domain support to iOS 18 Control Center controls. Users can now
toggle fan entities directly from Control Center alongside existing
light, switch, and cover controls.

## Screenshots

N/A - Control Center widget requires device testing with configured fan
entities

## Link to pull request in Documentation repository

Documentation: home-assistant/companion.home-assistant#

## Any other notes

**Implementation:**
- Added `fan` domain to `Domain` enum with on/off states and CarPlay
support
- Created `ControlFan` widget with 4 files following existing control
patterns:
  - Main widget configuration with blue tint
  - Intent handler for toggle/turn_on/turn_off services
- Entity query with async pattern (matching Switch/Cover for
future-proofing)
- Value provider for state management with SF Symbol icons
(`fan`/`fan.fill`) and optional displayText parameter
- Integrated fan domain into system components:
  - `HAAPI.swift` - Added to toggle domain case
  - `HAEntity+CarPlay.swift` - Added fan icon mapping
  - `MagicItem.swift` - Added to toggle domain case
- Registered as `controlFan` in `WidgetsKind` and `WidgetsBundle18`
- Added localization strings following established patterns ("Choose
fan" for consistency)
- Added optional `displayText` parameter to `ControlFanConfiguration`
for custom display names (matching PR #4104 pattern)

**Pattern consistency:**
Mirrors Switch/Cover implementations with async entity queries. Uses
standard on/off toggle model with state-based icons. Includes
displayText override feature for user customization.

<!-- START COPILOT ORIGINAL PROMPT -->



<details>

<summary>Original prompt</summary>

> 
> ----
> 
> *This section details on the original issue you should resolve*
> 
> <issue_title>Add "fan" entity type to control center
controls</issue_title>
> <issue_description>
> ### Discussed in
https://github.com/home-assistant/iOS/discussions/3679
> 
> <div type='discussions-op-text'>
> 
> <sup>Originally posted by **haydonryan** June 29, 2025</sup>
> Currently on IOS we have most of the major types except for fans.
Could we add that too please?
> 
>
![image](https://github.com/user-attachments/assets/6bef25db-f706-45f8-92cb-5940b5f0f7c4)</div></issue_description>
> 
> ## Comments on the Issue (you are @copilot in this section)
> 
> <comments>
> </comments>
> 


</details>



<!-- START COPILOT CODING AGENT SUFFIX -->

- Fixes home-assistant/iOS#3681

<!-- START COPILOT CODING AGENT TIPS -->
---

💬 We'd love your input! Share your thoughts on Copilot coding agent in
our [2 minute survey](https://gh.io/copilot-coding-agent-survey).

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: bgoncal <5808343+bgoncal@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-12-18 16:15:02 +00:00
github-actions[bot]
0c860cca37 Update Localized Strings (#4111)
Automatically created by zacwest.

Co-authored-by: Home Assistant Bot <hello@home-assistant.io>
Co-authored-by: Bruno Pantaleão Gonçalves <5808343+bgoncal@users.noreply.github.com>
2025-12-18 14:47:46 +01:00
Copilot
d79ef4d400 Add display text override parameter to Control Center controls (#4104)
## Add display text parameter to Control Center controls

- [x] Explore repository structure and understand Control Center
controls
- [x] Add displayText parameter to ControlButtonConfiguration (Button
control)
- [x] Update ControlButtonValueProvider to use displayText when
available
- [x] Add displayText parameter to ControlSwitchConfiguration (Switch
control)
- [x] Update ControlSwitchValueProvider to use displayText when
available
- [x] Add displayText parameter to ControlLightsConfiguration (Light
control)
- [x] Update ControlLightsValueProvider to use displayText when
available
- [x] Add displayText parameter to ControlCoverConfiguration (Cover
control)
- [x] Update ControlCoverValueProvider to use displayText when available
- [x] Add displayText parameter to ControlSceneConfiguration (Scene
control)
- [x] Update ControlScenesValueProvider to use displayText when
available
- [x] Update ControlScene to use displayText in Label
- [x] Add displayText parameter to ControlScriptsConfiguration (Script
control)
- [x] Update ControlScriptsValueProvider to use displayText when
available
- [x] Update ControlScript to use displayText in Label
- [x] Add displayText parameter to ControlOpenPageConfiguration
(OpenPage control)
- [x] Update ControlOpenPageValueProvider to use displayText when
available
- [x] Update ControlOpenPage to use displayText in Label
- [x] Add displayText parameter to ControlAssistConfiguration (Assist
control)
- [x] Update ControlAssistValueProvider to use displayText when
available
- [x] Update ControlAssist to use displayText in Label
- [x] Add displayText parameter to all OpenEntity controls (Entity,
Switch, Light, Cover, InputBoolean, Lock, Camera, Sensor)
- [x] Update all OpenEntity value providers to use displayText when
available
- [x] Update all OpenEntity controls to use displayText in Labels
- [x] Run code review - No issues found
- [x] Run security checks - No vulnerabilities detected
- [x] Fix SwiftFormat lint issues - wrapped long lines to meet 120
character limit

## Summary

Successfully added an optional `displayText` parameter to all Control
Center control configurations. This allows users to override the default
display text shown on their controls without changing the underlying
entity name.

### Implementation Details

**Controls Updated (19 total):**
1. Button
2. Switch
3. Light
4. Cover
5. Scene
6. Script
7. OpenPage
8. Assist
9. OpenEntity
10. OpenSwitch
11. OpenLight
12. OpenCoverEntity
13. OpenInputBoolean
14. OpenLock
15. OpenCamera
16. OpenSensor

**Pattern Applied:**
- Added `@Parameter` for `displayText: String?` in each Configuration
struct
- Added `displayText: String?` field to each Item struct
- Updated value providers to pass displayText through to items
- Updated control widgets to use `displayText ?? defaultText` pattern
for labels
- Parameter is optional, maintaining backward compatibility
- Fixed SwiftFormat lint issues by wrapping long lines

**Files Modified:** 28 files total
- 19 Configuration/ValueProvider files
- 19 Control widget files (some combined in same file)

All changes maintain backward compatibility - existing controls will
continue to work without modification.

<!-- START COPILOT CODING AGENT SUFFIX -->



<!-- START COPILOT ORIGINAL PROMPT -->



<details>

<summary>Original prompt</summary>

> To each Control center control that we have, add a new parameter to
control configuration where the user can override the display text


</details>



<!-- START COPILOT CODING AGENT TIPS -->
---

💬 We'd love your input! Share your thoughts on Copilot coding agent in
our [2 minute survey](https://gh.io/copilot-coding-agent-survey).

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: bgoncal <5808343+bgoncal@users.noreply.github.com>
2025-12-18 13:28:56 +00:00
Bruno Pantaleão Gonçalves
cd1b11d66b Update Xcode version on README (#4110) 2025-12-18 08:41:31 +00:00
Copilot
a7627d53aa Fix Mac device identification on macOS Catalyst (#4108) 2025-12-18 02:28:53 +00:00
Copilot
cb62b93a78 Fix camera stream not terminating on notification dismissal (macOS) (#4107) 2025-12-18 02:09:30 +00:00
github-actions[bot]
caa97b6034 Update Localized Strings (#4100)
Automatically created by zacwest.

Co-authored-by: Home Assistant Bot <hello@home-assistant.io>
Co-authored-by: Bruno Pantaleão Gonçalves <5808343+bgoncal@users.noreply.github.com>
2025-12-17 14:53:23 +01:00
Copilot
8d818d2276 Add Command+F search functionality to WebViewController (#4102)
## Summary
Implements native web content search using WKWebView's find interaction
API (iOS 16+). Pressing Command+F on macCatalyst now opens the standard
iOS find panel with search, navigation, and match highlighting.

**Implementation:**
- Enabled `isFindInteractionEnabled` on WKWebView in `viewDidLoad()`
- Added Command+F key command that calls `showFindInteraction()` to
present find navigator
- Added "Find" menu item to View menu with keyboard shortcut
- Localized in English only (base localization)

**Platform availability:**
- macCatalyst only (keyboard shortcuts conditionally compiled)
- iOS 16.0+ (graceful fallback for older versions)

## Screenshots
N/A - Uses native iOS system UI

## Link to pull request in Documentation repository
Documentation: home-assistant/companion.home-assistant#

## Any other notes
Leverages Apple's native find interaction rather than implementing
custom search UI. The find panel, keyboard navigation, match counting,
and accessibility support are all provided by the system.

<!-- START COPILOT CODING AGENT SUFFIX -->



<!-- START COPILOT ORIGINAL PROMPT -->



<details>

<summary>Original prompt</summary>

> Implement "search content" feature (aka command + F) to
WebViewController


</details>



<!-- START COPILOT CODING AGENT TIPS -->
---

 Let Copilot coding agent [set things up for
you](https://github.com/home-assistant/iOS/issues/new?title=+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot)
— coding agent works faster and does higher quality work when set up for
your repo.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: bgoncal <5808343+bgoncal@users.noreply.github.com>
2025-12-17 11:28:16 +00:00
Bruno Pantaleão Gonçalves
6e76360d36 Add ControlOpen and related source files to project (#4101)
<!-- Thank you for submitting a Pull Request and helping to improve Home
Assistant. Please complete the following sections to help the processing
and review of your changes. Please do not delete anything from this
template. -->

## Summary
<!-- Provide a brief summary of the changes you have made and most
importantly what they aim to achieve -->
Controls that open the app need to have the main app on its target, this
PR makes sure of it

## Screenshots
<!-- If this is a user-facing change not in the frontend, please include
screenshots in light and dark mode. -->

## Link to pull request in Documentation repository
<!-- Pull requests that add, change or remove functionality must have a
corresponding pull request in the Companion App Documentation repository
(https://github.com/home-assistant/companion.home-assistant). Please add
the number of this pull request after the "#" -->
Documentation: home-assistant/companion.home-assistant#

## Any other notes
<!-- If there is any other information of note, like if this Pull
Request is part of a bigger change, please include it here. -->
2025-12-17 10:35:00 +00:00
Bruno Pantaleão Gonçalves
50fffc8e8f Add external bus event handler to focus on specific HTML element (#4098)
<!-- Thank you for submitting a Pull Request and helping to improve Home
Assistant. Please complete the following sections to help the processing
and review of your changes. Please do not delete anything from this
template. -->

## Summary
<!-- Provide a brief summary of the changes you have made and most
importantly what they aim to achieve -->

## Screenshots
<!-- If this is a user-facing change not in the frontend, please include
screenshots in light and dark mode. -->

## Link to pull request in Documentation repository
<!-- Pull requests that add, change or remove functionality must have a
corresponding pull request in the Companion App Documentation repository
(https://github.com/home-assistant/companion.home-assistant). Please add
the number of this pull request after the "#" -->
Documentation: home-assistant/companion.home-assistant#

## Any other notes
<!-- If there is any other information of note, like if this Pull
Request is part of a bigger change, please include it here. -->
2025-12-16 19:28:17 +00:00
github-actions[bot]
32f56906ce Update Localized Strings (#4094)
Automatically created by zacwest.

Co-authored-by: Home Assistant Bot <hello@home-assistant.io>
Co-authored-by: Bruno Pantaleão Gonçalves <5808343+bgoncal@users.noreply.github.com>
2025-12-16 19:32:03 +01:00
Copilot
4d9ce70a5d Update getEntities to match entity ID, name, and area name (#4096)
## Summary
Updated the `ControlEntityProvider.getEntities()` method to support
enhanced entity filtering. Users can now search for entities by matching
against entity ID, entity name, or area name, making it easier to find
entities in App Intents and other contexts that use this provider.

### Changes Made
- **Entity ID matching**: Users can now search by the full entity ID
(e.g., "light.living_room")
- **Entity name matching**: Existing functionality maintained and
improved
- **Area name matching**: Users can now search for entities by their
area (e.g., "Kitchen")
- **Improved matching algorithm**: Changed from simple case-insensitive
`contains()` to use `range(of:options:)` with `.caseInsensitive` and
`.diacriticInsensitive` options for better internationalization support

### Technical Details
- Area information is fetched per server only when a search string is
provided
- Created an entity-to-area mapping for efficient lookups
- Matching logic is now consistent with the implementation in
`HAAppEntityAppIntentEntityQuery`
- All linters passed (SwiftFormat, SwiftLint)
- No security issues detected

## Screenshots
<!-- Not applicable - this is a backend change to entity filtering logic
-->

## Link to pull request in Documentation repository
<!-- No documentation changes required for this internal filtering
improvement -->
Documentation: home-assistant/companion.home-assistant#

## Any other notes
This change improves the user experience when searching for entities in
App Intents and other contexts that use `ControlEntityProvider`, making
entity discovery more intuitive and flexible.

<!-- START COPILOT ORIGINAL PROMPT -->



<details>

<summary>Original prompt</summary>

> ControlEntityProvider getEntities should match with entity ID, name
and area name to which the entity belongs


</details>



<!-- START COPILOT CODING AGENT TIPS -->
---

💡 You can make Copilot smarter by setting up custom instructions,
customizing its development environment and configuring Model Context
Protocol (MCP) servers. Learn more [Copilot coding agent
tips](https://gh.io/copilot-coding-agent-tips) in the docs.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: bgoncal <5808343+bgoncal@users.noreply.github.com>
2025-12-16 19:01:05 +01:00
Bruno Pantaleão Gonçalves
1d2adcc418 Exclude Mac Catalyst from MatterSupport import check (#4097)
Updated the isAvailable property to exclude macCatalyst from the
MatterSupport import check, ensuring Matter features are only enabled on
supported platforms.

<!-- Thank you for submitting a Pull Request and helping to improve Home
Assistant. Please complete the following sections to help the processing
and review of your changes. Please do not delete anything from this
template. -->

## Summary
<!-- Provide a brief summary of the changes you have made and most
importantly what they aim to achieve -->

## Screenshots
<!-- If this is a user-facing change not in the frontend, please include
screenshots in light and dark mode. -->

## Link to pull request in Documentation repository
<!-- Pull requests that add, change or remove functionality must have a
corresponding pull request in the Companion App Documentation repository
(https://github.com/home-assistant/companion.home-assistant). Please add
the number of this pull request after the "#" -->
Documentation: home-assistant/companion.home-assistant#

## Any other notes
<!-- If there is any other information of note, like if this Pull
Request is part of a bigger change, please include it here. -->
2025-12-16 18:59:18 +01:00
Copilot
9e8df8ad9d Format BSSID MAC addresses with leading zeros for consistency with Android (#4095)
## Summary
BSSID sensor reported MAC addresses without leading zeros (e.g.,
`18:e8:29:a7:e9:b`), inconsistent with Android companion app and
standard MAC address notation. This breaks cross-platform room presence
tracking.

**Changes:**
- Added `String.formattedBSSID` extension that pads hex octets to 2
characters
- Applied formatting to BSSID sensor state in `ConnectivitySensor`
- Added test coverage for formatting edge cases

```swift
// Before: "18:e8:29:a7:e9:b"
// After:  "18:e8:29:a7:e9:0b"
sensor.State = bssid.formattedBSSID
```

## Screenshots
N/A - Sensor value formatting change only

## Link to pull request in Documentation repository
Documentation: home-assistant/companion.home-assistant#

## Any other notes
**Breaking change:** Users with BSSID-based automations must update to
the new zero-padded format. This aligns iOS with Android, standard MAC
notation, and network management tools like UniFi.

<!-- START COPILOT ORIGINAL PROMPT -->



<details>

<summary>Original prompt</summary>

> 
> ----
> 
> *This section details on the original issue you should resolve*
> 
> <issue_title>BSSID mac address format isn't consistant with Android
Companion app</issue_title>
> <issue_description>**iOS device model, version and app version**
> <!-- Please include your device 'Model Name' and 'Software Version' as
listed in iOS Settings>General>About. Please also give the app version
listed beneath "Home Assistant Companion" in the App Configuration>About
menu within the app, please include the number in brackets -->
> 
> Model Name: IPhone 6S
> Software Version: IOS 14.4.1
> App version: 2021.77
> 
> **Home Assistant Core Version**
> version | core-2021.3.4
> -- | --
> installation_type | Home Assistant Container
> dev | false
> hassio | false
> docker | true
> virtualenv | false
> python_version | 3.8.7
> os_name | Linux
> os_version | 5.3.18-3-pve
> arch | x86_64
> timezone | Europe/Paris
> 
> <details><summary>Home Assistant Community Store</summary>
> 
> GitHub API | ok
> -- | --
> Github API Calls Remaining | 4998
> Installed Version | 1.11.0
> Stage | running
> Available Repositories | 850
> Installed Repositories | 8
> 
> </details>
> 
> <details><summary>Home Assistant Cloud</summary>
> 
> logged_in | false
> -- | --
> can_reach_cert_server | ok
> can_reach_cloud_auth | ok
> can_reach_cloud | ok
> 
> </details>
> 
> <details><summary>Lovelace</summary>
> 
> dashboards | 9
> -- | --
> resources | 6
> views | 31
> mode | storage
> 
> </details>
> 
> **Describe the bug**
> The BSSID sensor reports access point mac address with leading zeros
omitted
> example:
> 
> ```
> 18:e8:29:a7:e9:b
> ```
> The last number is 0x0b
> 
> An adroid device connected the the same access point returns 
> 
> ```
> 18:e8:29:a7:e9:0b
> ```
> **To Reproduce**
> You need to have an access point with mac bytes lower then 0x10
> 
> **Expected behavior**
> Having same BSSID representation than reported by Android App
companion
> 
> **Screenshots**
> Iphone:
>
![image](https://user-images.githubusercontent.com/5980377/113318644-f3901d00-9310-11eb-94a8-63e53675946d.png)
> 
> Android phone
>
![image](https://user-images.githubusercontent.com/5980377/113318689-00ad0c00-9311-11eb-8594-8daa837dbb2a.png)
> 
> 
> **Additional context**
> I'm using BSSID to track room presence based on connected AP. I'm
trying to share BSSID --> access point for all household mobile.
> 
> I'd prefer the version with leading 0 witch is aligned with Unify
management tool.
> 
> </issue_description>
> 
> ## Comments on the Issue (you are @copilot in this section)
> 
> <comments>
> <comment_new><author>@zacwest</author><body>
> We're just slurping the value we read from the system, so we'd need to
sanitize the input to change it. It would also be a breaking change for
modifying what values are sent up, which is less-than-ideal since users
get auto-updated in the apps. I'm not sure there's a great path forward
for resolving this.</body></comment_new>
> </comments>
> 


</details>



<!-- START COPILOT CODING AGENT SUFFIX -->

- Fixes home-assistant/iOS#1563

<!-- START COPILOT CODING AGENT TIPS -->
---

💡 You can make Copilot smarter by setting up custom instructions,
customizing its development environment and configuring Model Context
Protocol (MCP) servers. Learn more [Copilot coding agent
tips](https://gh.io/copilot-coding-agent-tips) in the docs.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: bgoncal <5808343+bgoncal@users.noreply.github.com>
2025-12-16 12:38:06 +00:00
Copilot
2aa5c551b8 Add domain-specific controls for iOS Control Center (#4093)
## Implementation Plan for Domain-Specific Open Entity Controls

**Phase 1 - Initial 3 controls (COMPLETED):**
- [x] Add WidgetsKind cases for camera, lock, cover
- [x] Create ControlOpenCamera, ControlOpenLock, ControlOpenCoverEntity
- [x] Add localization strings and tests

**Phase 2 - Complete all domains (COMPLETED):**
- [x] Add WidgetsKind cases for remaining domains
- [x] Create all 11 remaining controls
- [x] Add localization strings for all new controls
- [x] Register all controls in WidgetsBundle18
- [x] Update tests for all new cases
- [x] Add files to Xcode project
- [x] Fix localization keys for snake_case domains

**Phase 3 - Code optimization (COMPLETED):**
- [x] Refactor all controls to use shared OpenEntityAppIntent
- [x] Remove 14 duplicate AppIntent files
- [x] Update Xcode project references
- [x] Clean up backup files

**Phase 4 - Refinement (COMPLETED):**
- [x] Combine sensor and binary_sensor into single control
- [x] Remove script, scene, zone, and person controls
- [x] Update all references and localization

**Phase 5 - Convert button to action control (COMPLETED):**
- [x] Convert ControlOpenButton to ControlButton (stateless press
action)
- [x] Create ButtonIntent that executes button.press service
- [x] Combine button and input_button domains
- [x] Remove ControlOpenInputButton
- [x] Update all references and localization
- [x] Fix code review issues

**Phase 6 - Add beta label (COMPLETED):**
- [x] Add beta label to ControlOpenCamera using
promptsForUserConfiguration()

**Phase 7 - Fix linting (COMPLETED):**
- [x] Fix line length warning in ControlOpenInputBooleanValueProvider

## Summary

Successfully implemented 8 focused controls for iOS Control Center with
all linting issues resolved:

**Final 8 Controls:**
- **Button** - Stateless action control that presses button/input_button
entities
- **Camera** - Opens camera entities (with beta label)
- **Cover** - Opens cover entities
- **Input Boolean** - Opens input_boolean entities
- **Light** - Opens light entities
- **Lock** - Opens lock entities
- **Sensor** - Opens sensor/binary_sensor entities
- **Switch** - Opens switch entities

All code passes linting checks with proper line width constraints.

<!-- START COPILOT CODING AGENT SUFFIX -->



<!-- START COPILOT ORIGINAL PROMPT -->



<details>

<summary>Original prompt</summary>

> We have the Open entity control in the app which allows users to add a
control in ios control center that opens entities. Please implement one
control like this per entity domain, like "Open camera", "Open lock",
"Open cover", make sure that the description mentions that the app will
open the entity inside the app and not perform any action directly


</details>



<!-- START COPILOT CODING AGENT TIPS -->
---

 Let Copilot coding agent [set things up for
you](https://github.com/home-assistant/iOS/issues/new?title=+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot)
— coding agent works faster and does higher quality work when set up for
your repo.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: bgoncal <5808343+bgoncal@users.noreply.github.com>
2025-12-16 12:07:01 +01:00
Copilot
4fd430220d Fix macOS Catalyst toolbar button rendering in widget item customization (#4092)
## Summary

On macOS Catalyst, the save button in widget item customization becomes
a thin vertical line and non-functional. The toolbar button lacked
explicit `ToolbarItem` placement, causing macOS Catalyst rendering
issues.

**Before:**
```swift
.toolbar {
    Button {
        save()
        dismiss()
    } label: {
        Text(mode == .add ? L10n.MagicItem.add : L10n.MagicItem.edit)
    }
}
```

**After:**
```swift
.toolbar {
    ToolbarItem(placement: .topBarTrailing) {
        Button {
            save()
            dismiss()
        } label: {
            Text(mode == .add ? L10n.MagicItem.add : L10n.MagicItem.edit)
        }
    }
}
```

## Screenshots

N/A - This fix restores existing expected behavior on macOS Catalyst.

## Link to pull request in Documentation repository

Documentation: home-assistant/companion.home-assistant#

## Any other notes

Aligns with toolbar patterns used in `WidgetCreationView.swift` and
other views that work correctly on macOS Catalyst.

<!-- START COPILOT ORIGINAL PROMPT -->



<details>

<summary>Original prompt</summary>

> 
> ----
> 
> *This section details on the original issue you should resolve*
> 
> <issue_title>macOS Custom Widget Beta: widget item updates not
saving</issue_title>
> <issue_description>Model Name: iMac 24-inch, 2023 Apple M3 
> macOS Version: Tahoe 26.1 
> App Version: 2025.11.2 (2025.1537)
> Safari Version: 26.1
> 
> **Home Assistant Core Version** 25.12.1
> 
> **Describe the bug**
> In the Custom Widget Beta, after saving an update of an existing item
in an existing widget eg changing custom colours or actions, the next
screen where the widget should save via a top right save button turns
into a long thin vertical button that does not appear to allow saving.
Item change in existing widgets will then not save.
> 
> **To Reproduce**
> Establish a new widget with (say) two new items and save it. Go back
into the widget, click on one of the items and change the colours or
action, and save the change. The resulting screen will not show a top
right button to save the updated widget, and the changes to the item
will be lost.
> 
> **Expected behavior**
> After making the change to the item and saving that change, the widget
should also then be saved presumably to preserve all changes that may
have been made to multiple items.
>   
> **Screenshots**
> 
> Widget "Test" created and ready to save:
> 
> <img width="698" height="590" alt="Image"
src="https://github.com/user-attachments/assets/a8b08af1-c7b3-4604-b9c0-88c22876410e"
/>
> 
> Basement Occupancy then adjusted to custom colours and is ready to
save:
> 
> <img width="695" height="459" alt="Image"
src="https://github.com/user-attachments/assets/e655f5d0-3e5b-473d-9e08-01d0843f4133"
/>
> 
> After saving the updated Basement Occupancy item the save widget
button that should be in the top left screen goes missing:
> 
> <img width="699" height="582" alt="Image"
src="https://github.com/user-attachments/assets/a66b1074-243d-40b8-906f-5aadc2868912"
/>
> 
> Going back out to the front screen (as that is the only option) and
back into the widget, the custom colour has not saved:
> 
> <img width="690" height="591" alt="Image"
src="https://github.com/user-attachments/assets/2f03b81d-45bf-4d98-aa52-a31079563c9c"
/>
> 
> **Additional context**
> The iOS custom widget beta does not seem to have this issue - only on
the macOS companion app.
> </issue_description>
> 
> <agent_instructions>Apparently when building for macOS catalyst, when
user tries to save widget in the widget builder that have in the app,
the save button does not work, the save text from inside the button
vanishes and just a small empty and functionless button is displayed
instead</agent_instructions>
> 
> ## Comments on the Issue (you are @copilot in this section)
> 
> <comments>
> <comment_new><author>@bgoncal</author><body>
> Please reopen the issue providing the information requested in the
issue report template.</body></comment_new>
> </comments>
> 


</details>



<!-- START COPILOT CODING AGENT SUFFIX -->

- Fixes home-assistant/iOS#4067

<!-- START COPILOT CODING AGENT TIPS -->
---

💬 We'd love your input! Share your thoughts on Copilot coding agent in
our [2 minute survey](https://gh.io/copilot-coding-agent-survey).

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: bgoncal <5808343+bgoncal@users.noreply.github.com>
2025-12-15 16:09:43 +00:00
github-actions[bot]
35c6562381 Update Localized Strings (#4089)
Automatically created by zacwest.

Co-authored-by: Home Assistant Bot <hello@home-assistant.io>
2025-12-15 13:50:10 +00:00
dependabot[bot]
10acd3bf86 GitHub Actions: Bump the dependencies group with 5 updates (#4091)
Bumps the dependencies group with 5 updates:

| Package | From | To |
| --- | --- | --- |
| [ruby/setup-ruby](https://github.com/ruby/setup-ruby) | `1.269.0` |
`1.270.0` |
| [actions/cache](https://github.com/actions/cache) | `4.3.0` | `5.0.1`
|
| [codecov/codecov-action](https://github.com/codecov/codecov-action) |
`5.5.1` | `5.5.2` |
| [actions/upload-artifact](https://github.com/actions/upload-artifact)
| `5.0.0` | `6.0.0` |
|
[peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request)
| `7.0.11` | `8.0.0` |

Updates `ruby/setup-ruby` from 1.269.0 to 1.270.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/ruby/setup-ruby/releases">ruby/setup-ruby's
releases</a>.</em></p>
<blockquote>
<h2>v1.270.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Bump actions/checkout from 5 to 6 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/ruby/setup-ruby/pull/830">ruby/setup-ruby#830</a></li>
<li>When setting $JAVA_HOME also add $JAVA_HOME/bin to PATH by <a
href="https://github.com/eregon"><code>@​eregon</code></a> in <a
href="https://redirect.github.com/ruby/setup-ruby/pull/836">ruby/setup-ruby#836</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/ruby/setup-ruby/compare/v1.269.0...v1.270.0">https://github.com/ruby/setup-ruby/compare/v1.269.0...v1.270.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="ac793fdd38"><code>ac793fd</code></a>
When setting $JAVA_HOME also add $JAVA_HOME/bin to PATH</li>
<li><a
href="5f8a775744"><code>5f8a775</code></a>
macos-13 is gone</li>
<li><a
href="30a6546035"><code>30a6546</code></a>
Bump actions/checkout from 5 to 6</li>
<li>See full diff in <a
href="d697be2f83...ac793fdd38">compare
view</a></li>
</ul>
</details>
<br />

Updates `actions/cache` from 4.3.0 to 5.0.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/cache/releases">actions/cache's
releases</a>.</em></p>
<blockquote>
<h2>v5.0.1</h2>
<blockquote>
<p>[!IMPORTANT]
<strong><code>actions/cache@v5</code> runs on the Node.js 24 runtime and
requires a minimum Actions Runner version of
<code>2.327.1</code>.</strong></p>
<p>If you are using self-hosted runners, ensure they are updated before
upgrading.</p>
</blockquote>
<hr />
<h1>v5.0.1</h1>
<h2>What's Changed</h2>
<ul>
<li>fix: update <code>@​actions/cache</code> for Node.js 24 punycode
deprecation by <a
href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
href="https://redirect.github.com/actions/cache/pull/1685">actions/cache#1685</a></li>
<li>prepare release v5.0.1 by <a
href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
href="https://redirect.github.com/actions/cache/pull/1686">actions/cache#1686</a></li>
</ul>
<h1>v5.0.0</h1>
<h2>What's Changed</h2>
<ul>
<li>Upgrade to use node24 by <a
href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
href="https://redirect.github.com/actions/cache/pull/1630">actions/cache#1630</a></li>
<li>Prepare v5.0.0 release by <a
href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
href="https://redirect.github.com/actions/cache/pull/1684">actions/cache#1684</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/cache/compare/v5...v5.0.1">https://github.com/actions/cache/compare/v5...v5.0.1</a></p>
<h2>v5.0.0</h2>
<blockquote>
<p>[!IMPORTANT]
<strong><code>actions/cache@v5</code> runs on the Node.js 24 runtime and
requires a minimum Actions Runner version of
<code>2.327.1</code>.</strong></p>
<p>If you are using self-hosted runners, ensure they are updated before
upgrading.</p>
</blockquote>
<hr />
<h2>What's Changed</h2>
<ul>
<li>Upgrade to use node24 by <a
href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
href="https://redirect.github.com/actions/cache/pull/1630">actions/cache#1630</a></li>
<li>Prepare v5.0.0 release by <a
href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
href="https://redirect.github.com/actions/cache/pull/1684">actions/cache#1684</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/cache/compare/v4.3.0...v5.0.0">https://github.com/actions/cache/compare/v4.3.0...v5.0.0</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/actions/cache/blob/main/RELEASES.md">actions/cache's
changelog</a>.</em></p>
<blockquote>
<h1>Releases</h1>
<h2>Changelog</h2>
<h3>5.0.1</h3>
<ul>
<li>Update <code>@azure/storage-blob</code> to <code>^12.29.1</code> via
<code>@actions/cache@5.0.1</code> <a
href="https://redirect.github.com/actions/cache/pull/1685">#1685</a></li>
</ul>
<h3>5.0.0</h3>
<blockquote>
<p>[!IMPORTANT]
<code>actions/cache@v5</code> runs on the Node.js 24 runtime and
requires a minimum Actions Runner version of <code>2.327.1</code>.
If you are using self-hosted runners, ensure they are updated before
upgrading.</p>
</blockquote>
<h3>4.3.0</h3>
<ul>
<li>Bump <code>@actions/cache</code> to <a
href="https://redirect.github.com/actions/toolkit/pull/2132">v4.1.0</a></li>
</ul>
<h3>4.2.4</h3>
<ul>
<li>Bump <code>@actions/cache</code> to v4.0.5</li>
</ul>
<h3>4.2.3</h3>
<ul>
<li>Bump <code>@actions/cache</code> to v4.0.3 (obfuscates SAS token in
debug logs for cache entries)</li>
</ul>
<h3>4.2.2</h3>
<ul>
<li>Bump <code>@actions/cache</code> to v4.0.2</li>
</ul>
<h3>4.2.1</h3>
<ul>
<li>Bump <code>@actions/cache</code> to v4.0.1</li>
</ul>
<h3>4.2.0</h3>
<p>TLDR; The cache backend service has been rewritten from the ground up
for improved performance and reliability. <a
href="https://github.com/actions/cache">actions/cache</a> now integrates
with the new cache service (v2) APIs.</p>
<p>The new service will gradually roll out as of <strong>February 1st,
2025</strong>. The legacy service will also be sunset on the same date.
Changes in these release are <strong>fully backward
compatible</strong>.</p>
<p><strong>We are deprecating some versions of this action</strong>. We
recommend upgrading to version <code>v4</code> or <code>v3</code> as
soon as possible before <strong>February 1st, 2025.</strong> (Upgrade
instructions below).</p>
<p>If you are using pinned SHAs, please use the SHAs of versions
<code>v4.2.0</code> or <code>v3.4.0</code></p>
<p>If you do not upgrade, all workflow runs using any of the deprecated
<a href="https://github.com/actions/cache">actions/cache</a> will
fail.</p>
<p>Upgrading to the recommended versions will not break your
workflows.</p>
<h3>4.1.2</h3>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="9255dc7a25"><code>9255dc7</code></a>
Merge pull request <a
href="https://redirect.github.com/actions/cache/issues/1686">#1686</a>
from actions/cache-v5.0.1-release</li>
<li><a
href="8ff5423e8b"><code>8ff5423</code></a>
chore: release v5.0.1</li>
<li><a
href="9233019a15"><code>9233019</code></a>
Merge pull request <a
href="https://redirect.github.com/actions/cache/issues/1685">#1685</a>
from salmanmkc/node24-storage-blob-fix</li>
<li><a
href="b975f2bb84"><code>b975f2b</code></a>
fix: add peer property to package-lock.json for dependencies</li>
<li><a
href="d0a0e18134"><code>d0a0e18</code></a>
fix: update license files for <code>@​actions/cache</code>,
fast-xml-parser, and strnum</li>
<li><a
href="74de208dcf"><code>74de208</code></a>
fix: update <code>@​actions/cache</code> to ^5.0.1 for Node.js 24
punycode fix</li>
<li><a
href="ac7f1152ea"><code>ac7f115</code></a>
peer</li>
<li><a
href="b0f846b50b"><code>b0f846b</code></a>
fix: update <code>@​actions/cache</code> with storage-blob fix for
Node.js 24 punycode depr...</li>
<li><a
href="a783357455"><code>a783357</code></a>
Merge pull request <a
href="https://redirect.github.com/actions/cache/issues/1684">#1684</a>
from actions/prepare-cache-v5-release</li>
<li><a
href="3bb0d78750"><code>3bb0d78</code></a>
docs: highlight v5 runner requirement in releases</li>
<li>Additional commits viewable in <a
href="0057852bfa...9255dc7a25">compare
view</a></li>
</ul>
</details>
<br />

Updates `codecov/codecov-action` from 5.5.1 to 5.5.2
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/codecov/codecov-action/releases">codecov/codecov-action's
releases</a>.</em></p>
<blockquote>
<h2>v5.5.2</h2>
<h2>What's Changed</h2>
<ul>
<li>check gpg only when skip-validation = false by <a
href="https://github.com/maxweng-sentry"><code>@​maxweng-sentry</code></a>
in <a
href="https://redirect.github.com/codecov/codecov-action/pull/1894">codecov/codecov-action#1894</a></li>
<li>chore: <code>disable_search</code> alignment by <a
href="https://github.com/freemanzMrojo"><code>@​freemanzMrojo</code></a>
in <a
href="https://redirect.github.com/codecov/codecov-action/pull/1881">codecov/codecov-action#1881</a></li>
<li>chore(release): 5.5.2 by <a
href="https://github.com/thomasrockhu-codecov"><code>@​thomasrockhu-codecov</code></a>
in <a
href="https://redirect.github.com/codecov/codecov-action/pull/1902">codecov/codecov-action#1902</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/maxweng-sentry"><code>@​maxweng-sentry</code></a>
made their first contribution in <a
href="https://redirect.github.com/codecov/codecov-action/pull/1894">codecov/codecov-action#1894</a></li>
<li><a
href="https://github.com/freemanzMrojo"><code>@​freemanzMrojo</code></a>
made their first contribution in <a
href="https://redirect.github.com/codecov/codecov-action/pull/1881">codecov/codecov-action#1881</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/codecov/codecov-action/compare/v5.5.1...v5.5.2">https://github.com/codecov/codecov-action/compare/v5.5.1...v5.5.2</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md">codecov/codecov-action's
changelog</a>.</em></p>
<blockquote>
<h2>v5.5.2</h2>
<h3>What's Changed</h3>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/codecov/codecov-action/compare/v5.5.1..v5.5.2">https://github.com/codecov/codecov-action/compare/v5.5.1..v5.5.2</a></p>
<h2>v5.5.1</h2>
<h3>What's Changed</h3>
<ul>
<li>fix: overwrite pr number on fork by <a
href="https://github.com/thomasrockhu-codecov"><code>@​thomasrockhu-codecov</code></a>
in <a
href="https://redirect.github.com/codecov/codecov-action/pull/1871">codecov/codecov-action#1871</a></li>
<li>build(deps): bump actions/checkout from 4.2.2 to 5.0.0 by
<code>@​app/dependabot</code> in <a
href="https://redirect.github.com/codecov/codecov-action/pull/1868">codecov/codecov-action#1868</a></li>
<li>build(deps): bump github/codeql-action from 3.29.9 to 3.29.11 by
<code>@​app/dependabot</code> in <a
href="https://redirect.github.com/codecov/codecov-action/pull/1867">codecov/codecov-action#1867</a></li>
<li>fix: update to use local app/ dir by <a
href="https://github.com/thomasrockhu-codecov"><code>@​thomasrockhu-codecov</code></a>
in <a
href="https://redirect.github.com/codecov/codecov-action/pull/1872">codecov/codecov-action#1872</a></li>
<li>docs: fix typo in README by <a
href="https://github.com/datalater"><code>@​datalater</code></a> in <a
href="https://redirect.github.com/codecov/codecov-action/pull/1866">codecov/codecov-action#1866</a></li>
<li>Document a <code>codecov-cli</code> version reference example by <a
href="https://github.com/webknjaz"><code>@​webknjaz</code></a> in <a
href="https://redirect.github.com/codecov/codecov-action/pull/1774">codecov/codecov-action#1774</a></li>
<li>build(deps): bump github/codeql-action from 3.28.18 to 3.29.9 by
<code>@​app/dependabot</code> in <a
href="https://redirect.github.com/codecov/codecov-action/pull/1861">codecov/codecov-action#1861</a></li>
<li>build(deps): bump ossf/scorecard-action from 2.4.1 to 2.4.2 by
<code>@​app/dependabot</code> in <a
href="https://redirect.github.com/codecov/codecov-action/pull/1833">codecov/codecov-action#1833</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/codecov/codecov-action/compare/v5.5.0..v5.5.1">https://github.com/codecov/codecov-action/compare/v5.5.0..v5.5.1</a></p>
<h2>v5.5.0</h2>
<h3>What's Changed</h3>
<ul>
<li>feat: upgrade wrapper to 0.2.4 by <a
href="https://github.com/jviall"><code>@​jviall</code></a> in <a
href="https://redirect.github.com/codecov/codecov-action/pull/1864">codecov/codecov-action#1864</a></li>
<li>Pin actions/github-script by Git SHA by <a
href="https://github.com/martincostello"><code>@​martincostello</code></a>
in <a
href="https://redirect.github.com/codecov/codecov-action/pull/1859">codecov/codecov-action#1859</a></li>
<li>fix: check reqs exist by <a
href="https://github.com/joseph-sentry"><code>@​joseph-sentry</code></a>
in <a
href="https://redirect.github.com/codecov/codecov-action/pull/1835">codecov/codecov-action#1835</a></li>
<li>fix: Typo in README by <a
href="https://github.com/spalmurray"><code>@​spalmurray</code></a> in <a
href="https://redirect.github.com/codecov/codecov-action/pull/1838">codecov/codecov-action#1838</a></li>
<li>docs: Refine OIDC docs by <a
href="https://github.com/spalmurray"><code>@​spalmurray</code></a> in <a
href="https://redirect.github.com/codecov/codecov-action/pull/1837">codecov/codecov-action#1837</a></li>
<li>build(deps): bump github/codeql-action from 3.28.17 to 3.28.18 by
<code>@​app/dependabot</code> in <a
href="https://redirect.github.com/codecov/codecov-action/pull/1829">codecov/codecov-action#1829</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/codecov/codecov-action/compare/v5.4.3..v5.5.0">https://github.com/codecov/codecov-action/compare/v5.4.3..v5.5.0</a></p>
<h2>v5.4.3</h2>
<h3>What's Changed</h3>
<ul>
<li>build(deps): bump github/codeql-action from 3.28.13 to 3.28.17 by
<code>@​app/dependabot</code> in <a
href="https://redirect.github.com/codecov/codecov-action/pull/1822">codecov/codecov-action#1822</a></li>
<li>fix: OIDC on forks by <a
href="https://github.com/joseph-sentry"><code>@​joseph-sentry</code></a>
in <a
href="https://redirect.github.com/codecov/codecov-action/pull/1823">codecov/codecov-action#1823</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/codecov/codecov-action/compare/v5.4.2..v5.4.3">https://github.com/codecov/codecov-action/compare/v5.4.2..v5.4.3</a></p>
<h2>v5.4.2</h2>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="671740ac38"><code>671740a</code></a>
chore(release): 5.5.2 (<a
href="https://redirect.github.com/codecov/codecov-action/issues/1902">#1902</a>)</li>
<li><a
href="96b38e9e60"><code>96b38e9</code></a>
chore: <code>disable_search</code> alignment (<a
href="https://redirect.github.com/codecov/codecov-action/issues/1881">#1881</a>)</li>
<li><a
href="9b6d1f84bd"><code>9b6d1f8</code></a>
check gpg only when skip-validation = false (<a
href="https://redirect.github.com/codecov/codecov-action/issues/1894">#1894</a>)</li>
<li>See full diff in <a
href="5a1091511a...671740ac38">compare
view</a></li>
</ul>
</details>
<br />

Updates `actions/upload-artifact` from 5.0.0 to 6.0.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/upload-artifact/releases">actions/upload-artifact's
releases</a>.</em></p>
<blockquote>
<h2>v6.0.0</h2>
<h2>v6 - What's new</h2>
<blockquote>
<p>[!IMPORTANT]
actions/upload-artifact@v6 now runs on Node.js 24 (<code>runs.using:
node24</code>) and requires a minimum Actions Runner version of 2.327.1.
If you are using self-hosted runners, ensure they are updated before
upgrading.</p>
</blockquote>
<h3>Node.js 24</h3>
<p>This release updates the runtime to Node.js 24. v5 had preliminary
support for Node.js 24, however this action was by default still running
on Node.js 20. Now this action by default will run on Node.js 24.</p>
<h2>What's Changed</h2>
<ul>
<li>Upload Artifact Node 24 support by <a
href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
href="https://redirect.github.com/actions/upload-artifact/pull/719">actions/upload-artifact#719</a></li>
<li>fix: update <code>@​actions/artifact</code> for Node.js 24 punycode
deprecation by <a
href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
href="https://redirect.github.com/actions/upload-artifact/pull/744">actions/upload-artifact#744</a></li>
<li>prepare release v6.0.0 for Node.js 24 support by <a
href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
href="https://redirect.github.com/actions/upload-artifact/pull/745">actions/upload-artifact#745</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/upload-artifact/compare/v5.0.0...v6.0.0">https://github.com/actions/upload-artifact/compare/v5.0.0...v6.0.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="b7c566a772"><code>b7c566a</code></a>
Merge pull request <a
href="https://redirect.github.com/actions/upload-artifact/issues/745">#745</a>
from actions/upload-artifact-v6-release</li>
<li><a
href="e516bc8500"><code>e516bc8</code></a>
docs: correct description of Node.js 24 support in README</li>
<li><a
href="ddc45ed9bc"><code>ddc45ed</code></a>
docs: update README to correct action name for Node.js 24 support</li>
<li><a
href="615b319bd2"><code>615b319</code></a>
chore: release v6.0.0 for Node.js 24 support</li>
<li><a
href="017748b48f"><code>017748b</code></a>
Merge pull request <a
href="https://redirect.github.com/actions/upload-artifact/issues/744">#744</a>
from actions/fix-storage-blob</li>
<li><a
href="38d4c7997f"><code>38d4c79</code></a>
chore: rebuild dist</li>
<li><a
href="7d27270e0c"><code>7d27270</code></a>
chore: add missing license cache files for <code>@​actions/core</code>,
<code>@​actions/io</code>, and mi...</li>
<li><a
href="5f643d3c94"><code>5f643d3</code></a>
chore: update license files for <code>@​actions/artifact</code><a
href="https://github.com/5"><code>@​5</code></a>.0.1 dependencies</li>
<li><a
href="1df1684032"><code>1df1684</code></a>
chore: update package-lock.json with <code>@​actions/artifact</code><a
href="https://github.com/5"><code>@​5</code></a>.0.1</li>
<li><a
href="b5b1a91840"><code>b5b1a91</code></a>
fix: update <code>@​actions/artifact</code> to ^5.0.0 for Node.js 24
punycode fix</li>
<li>Additional commits viewable in <a
href="330a01c490...b7c566a772">compare
view</a></li>
</ul>
</details>
<br />

Updates `peter-evans/create-pull-request` from 7.0.11 to 8.0.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/peter-evans/create-pull-request/releases">peter-evans/create-pull-request's
releases</a>.</em></p>
<blockquote>
<h2>Create Pull Request v8.0.0</h2>
<h2>What's new in v8</h2>
<ul>
<li>Requires <a
href="https://github.com/actions/runner/releases/tag/v2.327.1">Actions
Runner v2.327.1</a> or later if you are using a self-hosted runner for
Node 24 support.</li>
</ul>
<h2>What's Changed</h2>
<ul>
<li>chore: Update checkout action version to v6 by <a
href="https://github.com/yonas"><code>@​yonas</code></a> in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4258">peter-evans/create-pull-request#4258</a></li>
<li>Update actions/checkout references to <a
href="https://github.com/v6"><code>@​v6</code></a> in docs by <a
href="https://github.com/Copilot"><code>@​Copilot</code></a> in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4259">peter-evans/create-pull-request#4259</a></li>
<li>feat: v8 by <a
href="https://github.com/peter-evans"><code>@​peter-evans</code></a> in
<a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4260">peter-evans/create-pull-request#4260</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/yonas"><code>@​yonas</code></a> made
their first contribution in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4258">peter-evans/create-pull-request#4258</a></li>
<li><a href="https://github.com/Copilot"><code>@​Copilot</code></a> made
their first contribution in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4259">peter-evans/create-pull-request#4259</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/peter-evans/create-pull-request/compare/v7.0.11...v8.0.0">https://github.com/peter-evans/create-pull-request/compare/v7.0.11...v8.0.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="98357b18bf"><code>98357b1</code></a>
feat: v8 (<a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4260">#4260</a>)</li>
<li><a
href="41c0e4b789"><code>41c0e4b</code></a>
Update actions/checkout references to <a
href="https://github.com/v6"><code>@​v6</code></a> in docs (<a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4259">#4259</a>)</li>
<li><a
href="994332de4c"><code>994332d</code></a>
chore: Update checkout action version to v6 (<a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4258">#4258</a>)</li>
<li>See full diff in <a
href="22a9089034...98357b18bf">compare
view</a></li>
</ul>
</details>
<br />


Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-15 14:07:39 +01:00
Copilot
61cd598eee Add retry mechanism to pod install in distribute workflow (#4088)
## Summary

The distribute workflow fails intermittently when `pod install`
encounters transient 503 errors downloading SwiftGen from GitHub
releases. CocoaPods' internal curl retry limit (2 attempts) is
insufficient for temporary service outages.

Added retry logic with exponential backoff to the "Install Pods" step:
- Retries up to 5 times on failure
- 10 second delay between attempts
- Clear logging of attempt progress
- Fails workflow only after all attempts exhausted

```yaml
- name: Install Pods
  run: |
    max_attempts=5
    attempt=1
    until bundle exec pod install --repo-update; do
      if [ $attempt -eq $max_attempts ]; then
        echo "Pod install failed after $max_attempts attempts"
        exit 1
      fi
      echo "Pod install failed (attempt $attempt/$max_attempts). Retrying in 10 seconds..."
      sleep 10
      attempt=$((attempt + 1))
    done
```

## Screenshots
N/A - CI/CD workflow change only

## Link to pull request in Documentation repository
N/A - no user-facing changes

## Any other notes
This pattern could be applied to other workflows (ci.yml,
download_localized_strings.yml) if they experience similar transient
failures.

<!-- START COPILOT ORIGINAL PROMPT -->



<details>

<summary>Original prompt</summary>

> ## Problem
> The workflow is failing during `pod install` when downloading SwiftGen
from GitHub releases due to transient 503 errors. The curl command
inside CocoaPods only retries twice, which isn't sufficient for
temporary service unavailability issues.
> 
> Error from logs:
> ```
> curl: (56) The requested URL returned error: 503
> ```
> 
> ## Solution
> Wrap the `bundle exec pod install --repo-update` command in step
"Install Pods" (line 34 of `.github/workflows/distribute.yml`) with a
retry mechanism that will attempt the installation multiple times with a
delay between attempts.
> 
> ## Implementation
> Update the "Install Pods" step in `.github/workflows/distribute.yml`
from:
> ```yaml
>       - name: Install Pods
>         run: bundle exec pod install --repo-update
> ```
> 
> To:
> ```yaml
>       - name: Install Pods
>         run: |
>           max_attempts=5
>           attempt=1
>           until bundle exec pod install --repo-update; do
>             if [ $attempt -eq $max_attempts ]; then
>               echo "Pod install failed after $max_attempts attempts"
>               exit 1
>             fi
> echo "Pod install failed (attempt $attempt/$max_attempts). Retrying in
10 seconds..."
>             sleep 10
>             attempt=$((attempt + 1))
>           done
> ```
> 
> This will:
> - Retry up to 5 times if pod install fails
> - Wait 10 seconds between retry attempts
> - Provide clear logging about which attempt is being made
> - Exit with failure only after all attempts are exhausted
> 
> ## Files to modify
> - `.github/workflows/distribute.yml` - Update line 33-34 in the
"Install Pods" step


</details>



<!-- START COPILOT CODING AGENT SUFFIX -->

*This pull request was created as a result of the following prompt from
Copilot chat.*
> ## Problem
> The workflow is failing during `pod install` when downloading SwiftGen
from GitHub releases due to transient 503 errors. The curl command
inside CocoaPods only retries twice, which isn't sufficient for
temporary service unavailability issues.
> 
> Error from logs:
> ```
> curl: (56) The requested URL returned error: 503
> ```
> 
> ## Solution
> Wrap the `bundle exec pod install --repo-update` command in step
"Install Pods" (line 34 of `.github/workflows/distribute.yml`) with a
retry mechanism that will attempt the installation multiple times with a
delay between attempts.
> 
> ## Implementation
> Update the "Install Pods" step in `.github/workflows/distribute.yml`
from:
> ```yaml
>       - name: Install Pods
>         run: bundle exec pod install --repo-update
> ```
> 
> To:
> ```yaml
>       - name: Install Pods
>         run: |
>           max_attempts=5
>           attempt=1
>           until bundle exec pod install --repo-update; do
>             if [ $attempt -eq $max_attempts ]; then
>               echo "Pod install failed after $max_attempts attempts"
>               exit 1
>             fi
> echo "Pod install failed (attempt $attempt/$max_attempts). Retrying in
10 seconds..."
>             sleep 10
>             attempt=$((attempt + 1))
>           done
> ```
> 
> This will:
> - Retry up to 5 times if pod install fails
> - Wait 10 seconds between retry attempts
> - Provide clear logging about which attempt is being made
> - Exit with failure only after all attempts are exhausted
> 
> ## Files to modify
> - `.github/workflows/distribute.yml` - Update line 33-34 in the
"Install Pods" step

<!-- START COPILOT CODING AGENT TIPS -->
---

💬 We'd love your input! Share your thoughts on Copilot coding agent in
our [2 minute survey](https://gh.io/copilot-coding-agent-survey).

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: bgoncal <5808343+bgoncal@users.noreply.github.com>
2025-12-11 17:03:51 +00:00
Bruno Pantaleão Gonçalves
4b5e0058bc Remove CarPlay driving task entitlement (#4086)
<!-- Thank you for submitting a Pull Request and helping to improve Home
Assistant. Please complete the following sections to help the processing
and review of your changes. Please do not delete anything from this
template. -->

## Summary
<!-- Provide a brief summary of the changes you have made and most
importantly what they aim to achieve -->

## Screenshots
<!-- If this is a user-facing change not in the frontend, please include
screenshots in light and dark mode. -->

## Link to pull request in Documentation repository
<!-- Pull requests that add, change or remove functionality must have a
corresponding pull request in the Companion App Documentation repository
(https://github.com/home-assistant/companion.home-assistant). Please add
the number of this pull request after the "#" -->
Documentation: home-assistant/companion.home-assistant#

## Any other notes
<!-- If there is any other information of note, like if this Pull
Request is part of a bigger change, please include it here. -->
2025-12-11 14:55:51 +00:00
Bruno Pantaleão Gonçalves
c423e62485 Exclude config/diagnostic entities from CarPlay list (#4085)
<!-- Thank you for submitting a Pull Request and helping to improve Home
Assistant. Please complete the following sections to help the processing
and review of your changes. Please do not delete anything from this
template. -->

## Summary
<!-- Provide a brief summary of the changes you have made and most
importantly what they aim to achieve -->

## Screenshots
<!-- If this is a user-facing change not in the frontend, please include
screenshots in light and dark mode. -->

## Link to pull request in Documentation repository
<!-- Pull requests that add, change or remove functionality must have a
corresponding pull request in the Companion App Documentation repository
(https://github.com/home-assistant/companion.home-assistant). Please add
the number of this pull request after the "#" -->
Documentation: home-assistant/companion.home-assistant#

## Any other notes
<!-- If there is any other information of note, like if this Pull
Request is part of a bigger change, please include it here. -->
2025-12-11 15:23:43 +01:00
Bruno Pantaleão Gonçalves
73ab54ea26 Load about:blank when no active URL in WebView (#4082)
When there is no active URL, the webview now loads about:blank to
prevent any current connections. Also fixed a log message typo for
clarity.

<!-- Thank you for submitting a Pull Request and helping to improve Home
Assistant. Please complete the following sections to help the processing
and review of your changes. Please do not delete anything from this
template. -->

## Summary
<!-- Provide a brief summary of the changes you have made and most
importantly what they aim to achieve -->

## Screenshots
<!-- If this is a user-facing change not in the frontend, please include
screenshots in light and dark mode. -->

## Link to pull request in Documentation repository
<!-- Pull requests that add, change or remove functionality must have a
corresponding pull request in the Companion App Documentation repository
(https://github.com/home-assistant/companion.home-assistant). Please add
the number of this pull request after the "#" -->
Documentation: home-assistant/companion.home-assistant#

## Any other notes
<!-- If there is any other information of note, like if this Pull
Request is part of a bigger change, please include it here. -->
2025-12-11 10:58:46 +01:00
Bruno Pantaleão Gonçalves
d36a0cfee7 Refactor how locks are handled in CarPlay (#4078) 2025-12-11 09:10:58 +01:00
Bruno Pantaleão Gonçalves
51f4d242b7 Update iOS version checks from 16.0 to 26.0 in SettingsView (#4079) 2025-12-11 09:10:32 +01:00
Bruno Pantaleão Gonçalves
6c369fee54 Update CarPlay config view to use NavigationStack (#4077)
Replaces the CarPlayConfigurationView presentation with NavigationStack
for iOS 16 and above, and falls back to NavigationView for earlier
versions. This ensures consistent navigation behavior across iOS
versions when launching the CarPlay configuration screen.

<!-- Thank you for submitting a Pull Request and helping to improve Home
Assistant. Please complete the following sections to help the processing
and review of your changes. Please do not delete anything from this
template. -->

## Summary
<!-- Provide a brief summary of the changes you have made and most
importantly what they aim to achieve -->

## Screenshots
<!-- If this is a user-facing change not in the frontend, please include
screenshots in light and dark mode. -->

## Link to pull request in Documentation repository
<!-- Pull requests that add, change or remove functionality must have a
corresponding pull request in the Companion App Documentation repository
(https://github.com/home-assistant/companion.home-assistant). Please add
the number of this pull request after the "#" -->
Documentation: home-assistant/companion.home-assistant#

## Any other notes
<!-- If there is any other information of note, like if this Pull
Request is part of a bigger change, please include it here. -->
2025-12-11 01:04:00 +00:00
github-actions[bot]
fa1d2d0bdd Update Localized Strings (#4071)
Automatically created by zacwest.

Co-authored-by: Home Assistant Bot <hello@home-assistant.io>
2025-12-11 00:26:48 +00:00
Copilot
b6a67c7105 Add area name as subtitle in CarPlay entity lists (#4073)
## Summary

Displays area name before entity state in CarPlay entity list subtitles
(e.g., "Living Room • On"), matching the pattern from PR #4069 for App
Intents.

**Implementation:**

- **CarPlayEntityListItem**: Added optional `area` property and static
`detailTextSeparator` constant. Detail text now prepends area name when
available.

- **CarPlayEntitiesListViewModel** & **CarPlayQuickAccessTemplate**:
Fetch areas once per server, build entity→area map for O(1) lookups,
pass area to entity items.

```swift
// CarPlayEntityListItem detail text construction
var detailsText = ""
if let area {
    detailsText = area + Self.detailTextSeparator  // " • "
}
detailsText += entity.localizedState.leadingCapitalized
```

Entities without areas display state only (no change). Areas fetched
once per update to avoid N+1 queries.

## Screenshots
<!-- If this is a user-facing change not in the frontend, please include
screenshots in light and dark mode. -->

## Link to pull request in Documentation repository
<!-- Pull requests that add, change or remove functionality must have a
corresponding pull request in the Companion App Documentation repository
(https://github.com/home-assistant/companion.home-assistant). Please add
the number of this pull request after the "#" -->
Documentation: home-assistant/companion.home-assistant#

## Any other notes
Applies to all CarPlay entity lists: Controls (Domains) tab, Quick
Access tab, and Areas tab.

<!-- START COPILOT CODING AGENT SUFFIX -->



<!-- START COPILOT ORIGINAL PROMPT -->



<details>

<summary>Original prompt</summary>

> In CarPlay, under "Controls" tab, let's add the area as subtitle
before the entity state.
> Reference PR https://github.com/home-assistant/iOS/pull/4069


</details>



<!-- START COPILOT CODING AGENT TIPS -->
---

 Let Copilot coding agent [set things up for
you](https://github.com/home-assistant/iOS/issues/new?title=+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot)
— coding agent works faster and does higher quality work when set up for
your repo.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: bgoncal <5808343+bgoncal@users.noreply.github.com>
2025-12-10 20:54:27 +01:00
Copilot
dad7295f4f Enable search by entity ID and area name in HAAppEntityAppIntentEntity (#4075)
## Summary

Extended entity search in App Intents to match against entity ID and
area name in addition to entity display name.

**Modified:** `HAAppEntityAppIntentEntityQuery.entities(matching:)`
- Added case-insensitive matching on `entityId` 
- Added case-insensitive matching on `area` (with nil-safe handling)
- Combined with existing `displayString` match using OR logic

Users can now search entities by:
- Display name: "Living Room Light"
- Entity ID: "light.living_room" 
- Area: "Living Room"

## Screenshots

N/A - Backend search logic change only

## Link to pull request in Documentation repository

Documentation: home-assistant/companion.home-assistant#

## Any other notes

None

<!-- START COPILOT CODING AGENT SUFFIX -->



<!-- START COPILOT ORIGINAL PROMPT -->



<details>

<summary>Original prompt</summary>

> When searching HAAppEntityAppIntentEntity, allow matching name, entity
id and area name


</details>



<!-- START COPILOT CODING AGENT TIPS -->
---

💬 We'd love your input! Share your thoughts on Copilot coding agent in
our [2 minute survey](https://gh.io/copilot-coding-agent-survey).

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: bgoncal <5808343+bgoncal@users.noreply.github.com>
2025-12-10 16:36:12 +00:00
Copilot
cd86bc3ade Add audio support to WebRTC video player with mute/unmute controls (#4074)
## Summary

Enables audio playback in the native WebRTC video player and adds
mute/unmute controls. The previous implementation had audio disabled via
`useManualAudio = true` to avoid microphone permission requests.

**Key changes:**

- **Audio session configuration**: Uses
`AVAudioSession.Category.playback` for receive-only audio (no microphone
access required)
- **Remote audio track management**: Properly extracts audio track from
peer connection transceivers after remote SDP is set
- **Mute/unmute UI**: Added button at bottom-left of player using SF
Symbols (`speaker.wave.fill` / `speaker.slash.fill`)
- **State synchronization**: ViewModel mute state always reflects actual
audio track state

**Technical details:**

```swift
// Audio session configured for playback only
audioSession.setCategory(AVAudioSession.Category.playback.rawValue)
audioSession.setMode(AVAudioSession.Mode.spokenAudio.rawValue)

// Remote audio track extracted after SDP negotiation
remoteAudioTrack = peerConnection.transceivers
    .first(where: { $0.mediaType == .audio })?
    .receiver.track as? RTCAudioTrack
```

The implementation removes microphone-related warnings from the
experimental disclaimer.

## Screenshots

N/A - Audio feature, no visual changes beyond the mute button icon which
follows existing control patterns.

## Link to pull request in Documentation repository

Documentation: home-assistant/companion.home-assistant#

## Any other notes

Audio mode uses `.spokenAudio` for optimal voice/camera audio playback.
The mute button follows the same auto-hide behavior as other player
controls (3-second timeout).

<!-- START COPILOT CODING AGENT SUFFIX -->



<!-- START COPILOT ORIGINAL PROMPT -->



<details>

<summary>Original prompt</summary>

> Let's start supporting audio on WebRTCVideoPlayerView, including
control mute/unmute


</details>



<!-- START COPILOT CODING AGENT TIPS -->
---

 Let Copilot coding agent [set things up for
you](https://github.com/home-assistant/iOS/issues/new?title=+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot)
— coding agent works faster and does higher quality work when set up for
your repo.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: bgoncal <5808343+bgoncal@users.noreply.github.com>
2025-12-10 16:34:30 +00:00
Copilot
d29319d949 Display area name in HAAppEntityAppIntentEntity subtitle (#4069)
## Summary

Adds area name display to `HAAppEntityAppIntentEntity` subtitle. When an
entity belongs to an area, the area name is shown instead of the entity
ID.

**Changes:**
- Added optional `area: String?` property to
`HAAppEntityAppIntentEntity`
- Modified `displayRepresentation` to show area name when available,
falls back to entity ID
- Optimized area lookup: fetch all areas per server once, build
entity→area dictionary for O(1) lookups

**Implementation:**
```swift
var displayRepresentation: DisplayRepresentation {
    DisplayRepresentation(title: "\(displayString)", subtitle: "\(area ?? entityId)")
}
```

Area lookups are batched per server and cached in a dictionary to avoid
N+1 database queries.

## Screenshots
<!-- If this is a user-facing change not in the frontend, please include
screenshots in light and dark mode. -->

## Link to pull request in Documentation repository
<!-- Pull requests that add, change or remove functionality must have a
corresponding pull request in the Companion App Documentation repository
(https://github.com/home-assistant/companion.home-assistant). Please add
the number of this pull request after the "#" -->
Documentation: home-assistant/companion.home-assistant#

## Any other notes
No breaking changes. Entities without areas continue to display entity
ID as before.

<!-- START COPILOT CODING AGENT SUFFIX -->



<!-- START COPILOT ORIGINAL PROMPT -->



<details>

<summary>Original prompt</summary>

> Display area in HAAppEntityAppIntentEntity subtitle display
representation


</details>



<!-- START COPILOT CODING AGENT TIPS -->
---

💬 We'd love your input! Share your thoughts on Copilot coding agent in
our [2 minute survey](https://gh.io/copilot-coding-agent-survey).

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: bgoncal <5808343+bgoncal@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-12-10 13:16:22 +00:00
dependabot[bot]
92d13885f5 GitHub Actions: Bump the dependencies group with 3 updates (#4061)
Bumps the dependencies group with 3 updates:
[actions/checkout](https://github.com/actions/checkout),
[ruby/setup-ruby](https://github.com/ruby/setup-ruby) and
[peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request).

Updates `actions/checkout` from 6.0.0 to 6.0.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/checkout/releases">actions/checkout's
releases</a>.</em></p>
<blockquote>
<h2>v6.0.1</h2>
<h2>What's Changed</h2>
<ul>
<li>Update all references from v5 and v4 to v6 by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2314">actions/checkout#2314</a></li>
<li>Add worktree support for persist-credentials includeIf by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2327">actions/checkout#2327</a></li>
<li>Clarify v6 README by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2328">actions/checkout#2328</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/checkout/compare/v6...v6.0.1">https://github.com/actions/checkout/compare/v6...v6.0.1</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="8e8c483db8"><code>8e8c483</code></a>
Clarify v6 README (<a
href="https://redirect.github.com/actions/checkout/issues/2328">#2328</a>)</li>
<li><a
href="033fa0dc0b"><code>033fa0d</code></a>
Add worktree support for persist-credentials includeIf (<a
href="https://redirect.github.com/actions/checkout/issues/2327">#2327</a>)</li>
<li><a
href="c2d88d3ecc"><code>c2d88d3</code></a>
Update all references from v5 and v4 to v6 (<a
href="https://redirect.github.com/actions/checkout/issues/2314">#2314</a>)</li>
<li>See full diff in <a
href="1af3b93b68...8e8c483db8">compare
view</a></li>
</ul>
</details>
<br />

Updates `ruby/setup-ruby` from 1.268.0 to 1.269.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/ruby/setup-ruby/releases">ruby/setup-ruby's
releases</a>.</em></p>
<blockquote>
<h2>v1.269.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Account for Bundler 4 by <a
href="https://github.com/eregon"><code>@​eregon</code></a> in <a
href="https://redirect.github.com/ruby/setup-ruby/pull/832">ruby/setup-ruby#832</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/ruby/setup-ruby/compare/v1.268.0...v1.269.0">https://github.com/ruby/setup-ruby/compare/v1.268.0...v1.269.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="d697be2f83"><code>d697be2</code></a>
Account for Bundler 4</li>
<li>See full diff in <a
href="8aeb6ff803...d697be2f83">compare
view</a></li>
</ul>
</details>
<br />

Updates `peter-evans/create-pull-request` from 7.0.9 to 7.0.11
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/peter-evans/create-pull-request/releases">peter-evans/create-pull-request's
releases</a>.</em></p>
<blockquote>
<h2>Create Pull Request v7.0.11</h2>
<h2>What's Changed</h2>
<ul>
<li>fix: restrict remote prune to self-hosted runners by <a
href="https://github.com/peter-evans"><code>@​peter-evans</code></a> in
<a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4250">peter-evans/create-pull-request#4250</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/peter-evans/create-pull-request/compare/v7.0.10...v7.0.11">https://github.com/peter-evans/create-pull-request/compare/v7.0.10...v7.0.11</a></p>
<h2>Create Pull Request v7.0.10</h2>
<p>⚙️ Fixes an issue where updating a pull request failed when targeting
a forked repository with the same owner as its parent.</p>
<h2>What's Changed</h2>
<ul>
<li>build(deps): bump the github-actions group with 2 updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4235">peter-evans/create-pull-request#4235</a></li>
<li>build(deps-dev): bump prettier from 3.6.2 to 3.7.3 in the npm group
by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4240">peter-evans/create-pull-request#4240</a></li>
<li>fix: provider list pulls fallback for multi fork same owner by <a
href="https://github.com/peter-evans"><code>@​peter-evans</code></a> in
<a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4245">peter-evans/create-pull-request#4245</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/obnyis"><code>@​obnyis</code></a> made
their first contribution in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4064">peter-evans/create-pull-request#4064</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/peter-evans/create-pull-request/compare/v7.0.9...v7.0.10">https://github.com/peter-evans/create-pull-request/compare/v7.0.9...v7.0.10</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="22a9089034"><code>22a9089</code></a>
fix: restrict remote prune to self-hosted runners (<a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4250">#4250</a>)</li>
<li><a
href="d4f3be6ce6"><code>d4f3be6</code></a>
fix: provider list pulls fallback for multi fork same owner (<a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4245">#4245</a>)</li>
<li><a
href="bc8a47f565"><code>bc8a47f</code></a>
build(deps-dev): bump prettier from 3.6.2 to 3.7.3 in the npm group (<a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4240">#4240</a>)</li>
<li><a
href="a67ef28ca5"><code>a67ef28</code></a>
build(deps): bump the github-actions group with 2 updates (<a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4235">#4235</a>)</li>
<li>See full diff in <a
href="84ae59a2cd...22a9089034">compare
view</a></li>
</ul>
</details>
<br />


Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-09 11:13:08 +01:00