Commit Graph

1137 Commits

Author SHA1 Message Date
Blue
f4a68ddd33 Localization change from build: 142911151 (#14535)
Co-authored-by: WSL localization <noreply@microsoft.com>
2026-03-25 17:31:20 -07:00
Ben Hillis
72a980d881 test: add support for ARM64 WSLC testing. (#14519)
---------

Co-authored-by: Ben Hillis <benhill@ntdev.microsoft.com>
2026-03-25 15:23:41 -07:00
JohnMcPMS
7b1b60274e Implement SDK IO callbacks (#14462)
Implements `WslcSetProcessSettingsIOCallback` and the use of those inputs for both initial and subsequent processes.  A new thread is started to run the `MultiHandleWait` and the container/process objects hold a `shared_ptr` reference to it.  The caller must keep one of the objects alive for the callback thread to keep working.
2026-03-25 14:56:09 -07:00
AmirMS
d154bd021d Add more WSLC E2E tests (#14365)
* Initial support for WSLC E2E tests

* More E2E tests

* More E2E tests

* WIP

* CP exit code fix

* Enhance structure

* Added E2E file

* Clang format

* Added E2E test

* Enhance structure

* Clang format

* Update header comment

* Update wslc path

* Resolving copilot comments

* Added E2E test

* Pull latest

* Addressed comments

* Addressed comments

* Clang format

* Addressed comments

* Load image

* Addressed comments

* Pull latest

* Addressed comments

* E2E test for wslc container delete

* Addressed comments

* Resolving copilot comments

* Added E2E test

* Added E2E test

* Added E2E test

* Added E2E test

* Added E2E test

* Added E2E test

* Added E2E test

* Added E2E test

* Added E2E test

* Fix test

* Added E2E tests

* Added E2E tests

* Added E2E tests

* Added E2E tests

* Added E2E tests

* Added E2E tests

* Added E2E tests

* Resolve copilot comment

* Clang format

* Replace S_OK with 0

* Resolve copilot comment

* Addressed comments

* Resolve copilot comment

* Update test after latest changes
2026-03-25 20:07:33 +00:00
beena352
636b16ceaa Handle singular/plural units in FormatRelativeTime 2026-03-25 09:59:33 -07:00
AmirMS
b6c0814538 Rename image delete to remove and add aliases (#14521)
* Rename image delete to remove

* Clang format
2026-03-24 23:02:42 -07:00
Flor Chacón
638a3cd571 Add DCAT registration remediation (#14450) 2026-03-24 13:38:02 -07:00
AmirMS
34fefa7555 Add volume alias (#14518)
* Add volume alias

* Fix Tests
2026-03-24 18:29:34 +00:00
Blue
99027a3b50 Signal wslcsdk.dll in the release pipeline (#14517) 2026-03-24 10:52:31 -07:00
AmirMS
ab40395bc9 Set container cursor (#14516)
* Container cursor

* Update pull image callback

* Clang format
2026-03-24 06:34:21 +00:00
Blue
72295b89d3 Rethink image parsing logic (#14496)
* Save state

* Rethink image parsing to correctly handle different reference formats

* Foramt

* Fix merge

* Apply PR feedback

* Format

* Apply PR feedback

* Use a regex based parser

* Format

* Reset the test session after termination

* Fix test case

* Apply PR feedback
2026-03-23 20:57:07 -07:00
AmirMS
696091597d Fix X Y (#14514) 2026-03-24 00:12:19 +00:00
Ben Hillis
f300953839 cleanup: rename WSLA telemetry provider WSLC (#14501)
* cleanup: rename WSLA telemetry provider WSLC

---------

Co-authored-by: Ben Hillis <benhill@ntdev.microsoft.com>
2026-03-23 16:16:47 -04:00
Ben Hillis
2db1652005 Move standard filesystem mounts to WSLA init startup (#14495)
* Move standard filesystem mounts to WSLA init startup

Move devtmpfs, proc, sysfs, devpts, and cgroup2 mounts from the
Windows-side ConfigureInitialMounts() to WSLAEntryPoint() in the
Linux init daemon. These mounts don't depend on host communication
and can be performed earlier during init startup.

Inline the remaining VHD-dependent mounts (root overlay and kernel
modules) directly into Initialize() and remove the now-unnecessary
ConfigureInitialMounts method.

* pr feedback

* MS_SHARED helper

---------

Co-authored-by: Ben Hillis <benhill@ntdev.microsoft.com>
2026-03-23 12:48:16 -07:00
Blue
bfd828a63f Fix potential pipe deadlock when wslc's stdin doesn't support overlapped IO (#14493) 2026-03-23 11:13:28 -07:00
Kevin Vega
237b92c9d7 Add VHD mounts as named volumes (#14362)
* Added VHD named volumes

* Clean up vhd volume

* Cleanup

* Formatting

* Add options validation

* Rename

* Format

* using utf8 instead of wide chars

* Validate volumes

* Tidying

* Rename resource

* Undo changes to es-ES

* Undo changes to es-ES

* Fix resources files

* Fix resources file (again)

* Fix idl ordering

* Fix rsources file again

* fix resources again

* Fix formatting

* Moved named volume handling to docker.

* Add named volume validation

* Fix test case

* Fix

* Fix Docker Client's CreateVolume

* Persist volume

* Refactor

* Address copilot comments

* Address copilot suggestions

* Log detach errors

* Address copilot comments

* Use volumes lock

* Update comment

* Address copilot comments

* Fix formatting

* Address copilot comments

* Fix formatting

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Fix duplicate check

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Address PR comments

* Copilot suggstion

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-03-23 10:47:36 -07:00
David Bennett
da35243025 CLI: Add Interactive test class and E2E tests for interactive scenarios (#14389) 2026-03-23 07:35:55 +00:00
AmirMS
e3918c2987 Initial support for port mapping in CLI (#14225)
* Init logic

* Readonly

* Init binding

* Formatting

* Resolve conflicts

* Added UT

* clang format

* Resolving copilot comments

* Resolving copilot comments

* Resolving comments

* Resolving comments

* Clang format

* Remove port allocation logic

* Clang format

* More UT

* Update container service

* Added E2E tests

* Added E2E tests

* cLang format

* cLang format

* Resolve copilot comment

* Clang format

* Addressed comments

* Resolve copilot comment

* Clang format

* Addressed comments

* Clang format
2026-03-20 21:57:25 +00:00
Ben Hillis
14c60ff097 merge master -> feature/wsl-for-apps (#14465)
* test: enable virtiofs tests and enable WSLG during testing (#14387)

* test: enable virtiofs tests and enable WSLG during testing

* test fix

---------

Co-authored-by: Ben Hillis <benhill@ntdev.microsoft.com>

* chore(distributions): Almalinux auto-update - 20260311 14:52:02 (#14404)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Fix CVE-2026-26127: bump .NET runtime from 10.0.0 to 10.0.4 (#14421)

Addresses Dependabot alerts #10 and #11. The Microsoft.NETCore.App.Runtime
packages (win-x64 and win-arm64) at version 10.0.0 are vulnerable to a
denial of service via out-of-bounds read when decoding malformed Base64Url
input (CVSS 7.5 High). Bumped to 10.0.4 which includes the fix.

Co-authored-by: Ben Hillis <benhill@ntdev.microsoft.com>

* Notice change from build: 141806547 (#14423)

Co-authored-by: WSL notice <noreply@microsoft.com>

* Ship initrd.img in MSI using build-time generation via powershell script (#14424)

* Ship initrd.img in MSI using build-time generation via tar.exe

Replace the install-time CreateInitrd/RemoveInitrd custom actions with a
build-time step that generates initrd.img using the Windows built-in
tar.exe (libarchive/bsdtar) and ships it directly in the MSI.

The install-time approach had a race condition: wsl.exe could launch
before the CreateInitrd custom action completed, causing
ERROR_FILE_NOT_FOUND for initrd.img.

Changes:
- Add CMake custom command to generate initrd.img via tar.exe --format=newc
- Add initrd.img as a regular file in the MSI tools component
- Remove CreateInitrd/RemoveInitrd custom actions from WiX, DllMain,
  and wslinstall.def
- Remove CreateCpioInitrd helper and its tests (no longer needed)
- Update pipeline build targets to build initramfs instead of init

* pr feedback

* more pr feedback

* switch to using a powershell script instead of tar.exe

* powershell script feedback

* hopefully final pr feedback

---------

Co-authored-by: Ben Hillis <benhill@ntdev.microsoft.com>

* virtiofs: update logic so querying virtiofs mount source does not require a call to the service (#14380)

* virtiofs: update logic so querying virtiofs mount source does not require a call to the service

* more pr feedback

* use std::filesystem::read_symlink

* pr feedback and use canonical path in virtiofs symlink

* make sure canonical path is always used

---------

Co-authored-by: Ben Hillis <benhill@ntdev.microsoft.com>

* virtio networking: add support for ipv6 (#14350)

* VirtioProxy: Add IPv6 address, gateway, and route support

- Add PreferredIpv6Address field and GetBestGatewayV6* methods to NetworkSettings
- Extend GetHostEndpointSettings() to discover IPv6 unicast address and gateway
- Add UpdateIpv6Address() using ModifyGuestEndpointSettingRequest<IPAddress>
- Push IPv6 default route to guest via UpdateDefaultRoute(AF_INET6)
- Remove AF_INET6 early return in ModifyOpenPorts, use INETADDR_PORT()
- Add EndpointRoute::DefaultRoute() static factory
- Pass client_ip_ipv6 in devicehost options (not yet parsed by devicehost)
- Remove gateway_ip from devicehost options (only needed for DHCP)
- Include IPv6 DNS servers in non-tunneling DNS settings
- Add ConfigurationV6 and DnsResolutionAAAA tests

* cleanup and add more ipv6 tests

* added test coverage and minor updates

* clang format

* pr feedback

* format source

* pr feedback

* test fixes

---------

Co-authored-by: Ben Hillis <benhill@ntdev.microsoft.com>

* Track `bind` syscall when port is 0 (#14333)

* Initial work

* .

* pr feedback and add unit test

* minor tweaks an fix use after free in logging statement

* implement PR feedback

* hopefully final pr feedback

* pr feedback in test function

* Address PR feedback: add try/catch to TrackPort and PortZeroBind queue push

---------

Co-authored-by: Ben Hillis <benhill@ntdev.microsoft.com>

* Add iptables to list of apps to install in WSL (#14459)

There were instructions already on how to install tcpdump in WSL, but
iptables are also needed for the log collection to be complete, so this
PR adds instructions on how to also install iptables.

Co-authored-by: Andre Muezerie <andremue@linux.microsoft.com>

* Update Microsoft.WSL.DeviceHost to version 1.1.39-0 (#14460)

Co-authored-by: Ben Hillis <benhill@ntdev.microsoft.com>

* Moves all Ubuntu distros to the tar-based format (#14463)

* Move all supported Ubuntu images to the new format

We backported the build pipeline so all current LTSes come out in the new tar-based format

* Remove the appx based distros

All WSL users can run tar-based distros by now, right?
There is no benefit in maintaining both formats.

* Enable DNS tunneling for VirtioProxy networking mode (#14461)

- Allow VirtioProxy to keep EnableDnsTunneling=true in config, but clear
  socket-specific options (BestEffortDnsParsing, DnsTunnelingIpAddress)
- Suppress dedicated DNS tunneling hvsocket for VirtioProxy; tunneling
  is handled through the VirtioNetworking device host instead
- Set DnsTunneling flag on VirtioNetworkingFlags so the device host
  knows to tunnel DNS
- Expand SWIOTLB kernel cmdline to cover VirtioFs and VirtioProxy
- Bump DeviceHost package to 1.1.39-0
- Add VirtioProxy DNS test coverage for tunneling on/off
- Skip GuestPortIsReleasedV6 on Windows 10

Co-authored-by: Ben Hillis <benhill@ntdev.microsoft.com>

* test: disable LoopbackExplicit due to OS build 29555 regression (#14477)

Co-authored-by: Ben Hillis <benhill@ntdev.microsoft.com>

* Refactor: trim unnecessary DLL deps from COMMON_LINK_LIBRARIES (#14426)

* Refactor: trim unnecessary DLL deps from COMMON_LINK_LIBRARIES

- Split MSI/Wintrust install functions from wslutil.cpp into install.cpp
- Remove MI.lib, wsldeps.lib, msi.lib, Wintrust.lib, computecore.lib,
  computenetwork.lib, Iphlpapi.lib from COMMON_LINK_LIBRARIES
- Add per-target MSI_LINK_LIBRARIES, HCS_LINK_LIBRARIES, SERVICE_LINK_LIBRARIES
- Delay-load msi.dll and WINTRUST.dll for wsl.exe and wslg.exe
- Result: wslhost, wslrelay, wslcsdk, testplugin lose msi/wintrust startup imports;
  wsl.exe and wslg.exe defer msi/wintrust loading until actually needed;
  wslservice is the only target that imports computecore/computenetwork/Iphlpapi

* minor fixes to install.cpp that were caught during PR

* move to wsl::windows::common::install namespace

---------

Co-authored-by: Ben Hillis <benhill@ntdev.microsoft.com>

* wslc: enable IPv6 and DNS tunneling for virtio proxy networking mode

---------

Co-authored-by: Ben Hillis <benhill@ntdev.microsoft.com>
Co-authored-by: AlmaLinux Autobot <107999298+almalinuxautobot@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Blue <OneBlue@users.noreply.github.com>
Co-authored-by: WSL notice <noreply@microsoft.com>
Co-authored-by: Daman Mulye <daman_mulye@hotmail.com>
Co-authored-by: Andre Muezerie <108841174+andremueiot@users.noreply.github.com>
Co-authored-by: Andre Muezerie <andremue@linux.microsoft.com>
Co-authored-by: Carlos Nihelton <carlos.santanadeoliveira@canonical.com>
2026-03-20 13:47:27 -07:00
Ben Hillis
e61174df74 Split WSLA/WSLC tests into a separate CI runner (#14472)
* Split WSLA/WSLC tests into a separate CI runner

---------

Co-authored-by: Ben Hillis <benhill@ntdev.microsoft.com>
2026-03-20 12:40:53 -07:00
Ben Hillis
e057d89f68 Fix size_t underflow in TablePrinter::PrintRow (#14414)
If row[i].size() > m_widths[i], the unsigned subtraction wraps to a huge
value, causing std::wstring to allocate enormous memory or crash.
Clamp the padding to zero when the row value exceeds the column width.

Co-authored-by: Ben Hillis <benhill@ntdev.microsoft.com>
2026-03-20 11:16:19 -07:00
Blue
845def83ee Correctly handle import errors in LoadImage() and ImportImage(), fix broken ExportContainer test case (#14483) 2026-03-20 10:52:06 -07:00
Blue
0b1c029925 Refactor container port mapping logic (#14469)
* Save state

* Save state

* Save state

* Save state

* Save state

* Fix last issues

* Format

* Save state

* Save state

* Save state

* Clear port status during shutdown

* Add checks for virtionet

* Cleanup before PR

* Keep track of port references

* Format

* Assign iterator

* Assign iterator

* Apply PR feedback

* Apply PR feedback

* Apply PR feedback

* Apply PR feedback

* Format
2026-03-20 10:34:34 -07:00
Ben Hillis
8e3229509c WSLC: Enforce read-only VirtioFS shares at the device host level (#14464)
* Enforce read-only VirtioFS shares at the device host level

Pass the 'ro' option to AddGuestDevice when mounting a read-only
VirtioFS share, ensuring the device host enforces write protection
regardless of guest-side mount operations.

Updated DeviceHost package to 1.1.39-0. Added tests for read-only
mount enforcement via remount and unmount+remount.

* wslc: skip ejecting virtiofs flexiov device while hotplug issue is being fixed

---------

Co-authored-by: Ben Hillis <benhill@ntdev.microsoft.com>
2026-03-20 10:34:00 -07:00
beena352
6e38728113 Add session termination coverage for Export & Save (#14458)
* Add session termination coverage for Export & Save

* clean up session termination test

* Skip delete-on-close during session termination

* Always use OpenAnonymousPipe in BlockingOperation

* Use unique_hfile in BlockingOperation
2026-03-20 09:24:55 -07:00
AmirMS
96daa4220e Initial support for volume mounting in CLI (#14228)
* Initial support for volume

* Clang format

* Clang format

* Revert

* Addressed comments

* Added more tests

* Added UT

* Added UT

* Added UT

* Added more tests

* CLang format

* CLang format

* Addressed comments

* Resolving copilot comments

* cLang format

* Resolving copilot comments

* Clang format

* fix test

* Clang format

* Addressed comments
2026-03-20 06:22:37 +00:00
Ben Hillis
6d82c11b8c cleanup: remove wslaservice and combine with wslservice (#14470)
* cleanup: remove wslaservice and combine with wslservice

* only call ClearWslaSessionsAndBlockNewInstances from ServiceStopped

---------

Co-authored-by: Ben Hillis <benhill@ntdev.microsoft.com>
2026-03-20 00:07:19 +00:00
Blue
922b7e8713 Switch wslc to use bridged mode networking (#14480) 2026-03-19 14:48:01 -07:00
JohnMcPMS
c5f9de15b8 Implement SDK Import and shared file spec (#14451)
Move both Import and Load options to use a shared file specification structure that can accept a path or HANDLE+length. Add image name to import options. Implement Import and Load using a shared path to normalize to HANDLE+length for runtime usage.
2026-03-19 11:49:56 -07:00
Ben Hillis
194a895f8d Fix missing throw in GnsPortTracker::GetSocketProtocol (#14476)
The throw keyword was accidentally dropped, causing the error to be
silently discarded when getxattr fails to read the socket protocol.
This corrupts port tracking state used by the mirrored-mode loopback
relay.

Co-authored-by: Ben Hillis <benhill@ntdev.microsoft.com>
2026-03-19 16:30:52 +00:00
Ben Hillis
3c563f72c0 test: disable LoopbackExplicit due to OS build 29555 regression (#14478)
Co-authored-by: Ben Hillis <benhill@ntdev.microsoft.com>
2026-03-19 05:59:19 +00:00
Ben Hillis
5c1f616d05 Remove VHD device path assert in ConfigureInitialMounts (#14468)
The WI_ASSERT checking that LUN 0 maps to /dev/sda and LUN 1 maps to
/dev/sdb is not guaranteed after rapid VM create/destroy cycles. The
kernel SCSI device enumeration order can vary, and the code already
uses the paths returned by init rather than hardcoded device names.

Co-authored-by: Ben Hillis <benhill@ntdev.microsoft.com>
2026-03-18 10:42:54 -07:00
Blue
e91443592d Write a telemetry event on session creation (#14431)
* Write a telemetry event on session creation

* Apply PR feedback
2026-03-17 10:44:52 -07:00
John Stephens
1743c05de9 Add build args and multiple tags to image build (#14407) 2026-03-16 21:04:03 -07:00
JohnMcPMS
0ebf9ef70c SDK verb-noun and error message complete change (#14430)
Swaps the remaining functions to verb-noun and adds error strings to the functions that seem likely to need them (open to more/less if desired).

Improves the error string handling so that we initialize the output pointer to null and can capture the error string when appropriate in a more formal way.
2026-03-16 14:46:54 -07:00
Kevin Vega
d031a14656 Deferred mounting volumes and mapping ports to Start (#14320)
* Do volume mounting and port mapping when starting containers instead of creating

* Add tests

* CLANG formatting

* Update src/windows/wslasession/WSLAContainer.cpp

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* CLANG formatting

* Undo changes to idl

* Fix idl

* Address copilot comments

* Fix port mapping

* Working with multiple steps

* Go back to pre-allocating

* Fix merge issues

* Undo changes to port relay

* Undo changes to UnmapPorts

* Add tests

* Update comments

* Fix formatting

* Fix broken test

* Address comments

* Fix failing tests

* Fix bad logic in open container

* Fixed referencing deallocated memory

* Remove unnecessary change

* Address copilot comments.

* Use shared_ptr to keep vmports reference if constructor throws.

* Address copilot comments

* Fix build

* Fix bad merge

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-03-16 13:50:23 -07:00
David Bennett
291e8b58cb CLI: Implement --rm argument in create and run (#14400) 2026-03-13 22:26:16 +00:00
JohnMcPMS
46c8eb6859 Implement most of remaining SDK APIs (#14394)
Implements all but 6 of the remaining SDK APIs.  Makes some changes to the header for alignment:
1. Enum naming / values for consistency with runtime
2. Use of `CONST` macro instead of `const` keyword directly
3. Make `WslcImageInfo` directly freeable by using a char array instead of pointer, reducing complexity for callers. Also removes values that the runtime does not provide to us.
2026-03-13 13:22:38 -07:00
Flor Chacón
3c9c3e16c5 Create NuGet for WSLC SDK (#14388) 2026-03-13 11:09:27 -07:00
Ben Hillis
a27d36053d wsla: fix use-after-free in HandleMessageImpl detached thread (#14417)
Capture SocketAddress by value instead of by reference in the childLogic
lambda. When ForkType == Thread, the detached thread calls
childPid.set_value() before using SocketAddress on the next line. Once
set_value unblocks the parent, HandleMessageImpl can return and destroy
the stack-local SocketAddress before the thread reads it.

Co-authored-by: Ben Hillis <benhill@ntdev.microsoft.com>
2026-03-12 20:43:39 -07:00
Blue
87b9247098 Implement cancellation for SaveImage() (#14410)
* Implement cancellation for SaveImage()

* Apply PR feedback

* Apply PR feedback
2026-03-12 14:18:39 -07:00
beena352
f6aa330387 Track container creation time and display created timestamp in CLI
* Track container creation time and display created timestamp in CLI

* remove comment

* Replace ContainerCreatedAtToString with FormatRelativeTime
2026-03-11 22:35:22 -07:00
Ben Hillis
b7b6120e5d Fix trailing periods in command descriptions and incomplete comment (#14415)
Standardize ShortDescription() strings to end with periods for
consistency. Complete truncated comment in ArgumentParser.cpp.

Co-authored-by: Ben Hillis <benhill@ntdev.microsoft.com>
2026-03-12 00:37:15 +00:00
Ben Hillis
d8fe60bf6d wsla: fix Content-Length parsing exception and TraceLogging truncation (#14422)
DockerHTTPClient.cpp: Wrap std::stoul() in try-catch to handle malformed
Content-Length headers gracefully instead of crashing the session with an
unhandled exception.

ContainerEventTracker.cpp: Clamp event.size() to USHRT_MAX before
casting to UINT16 for TraceLoggingCountedString. Previously, events
larger than 64KB would wrap the size, causing TraceLogging to read an
incorrect number of bytes.

Co-authored-by: Ben Hillis <benhill@ntdev.microsoft.com>
2026-03-11 23:56:10 +00:00
Blue
b6f36f40e4 Followup from #14391 (#14408) 2026-03-11 16:11:53 -07:00
AmirMS
c1518edcd6 Use wsla_schema (#14418) 2026-03-11 22:55:43 +00:00
Ben Hillis
8f39a000fa Fix use-after-free: restore shared_from_this() in Dmesg thread (#14412)
The worker thread captures raw 'this' but can outlive the DmesgCollector
object. Restore shared_from_this() to extend the object lifetime, and
update member accesses to use Self-> instead of implicit this.

Co-authored-by: Ben Hillis <benhill@ntdev.microsoft.com>
2026-03-11 15:20:34 -07:00
Ben Hillis
01eafe2667 Fix null pointer dereference in ProcessExited log (#14411)
exitMessage is dereferenced in WSL_LOG before the null check.
Move the log call inside the null-checked block.

Co-authored-by: Ben Hillis <benhill@ntdev.microsoft.com>
2026-03-11 21:47:18 +00:00
JohnMcPMS
0dd3abd3d5 Update chunk reader to better handle split buffers (#14409)
Improve chunk reader's handling of split buffers:
1. Only skips the initial `\r` or `\n` when `PendingBuffer` is empty ("between chunks")
2. Advances the buffer based on the amount read this time, not based on the total size of `PendingBuffer`
3. Checks for an empty header based on `PendingBuffer` size instead of the amount read this time
2026-03-11 13:53:41 -07:00
David Bennett
aa5236b1e6 Rename delete command to remove, add rm alias (#14399) 2026-03-11 20:19:28 +00:00