Skip to content

v1.38.0

Latest

Choose a tag to compare

@github-actions github-actions released this 02 Nov 10:28
· 19 commits to main since this release
42002a8

Lerd 1.38.0

Thanks to @millancore for helping us ship the Windows version.

Lerd gives every PHP project on your machine what it would have on a server:
its own .test domain over HTTPS, its own PHP version, its own databases,
cache and mail catcher. Nginx, PHP-FPM and every service run as rootless
Podman containers, so nothing is installed system-wide and nothing keeps
running once you stop it. There is a dashboard, a terminal UI, a CLI and an
MCP server over the same environment.

Install

One line on Linux and macOS alike:

curl -fsSL https://lerd.sh/install.sh | bash

It installs what is missing, puts the binary in ~/.local/bin, and runs
lerd install to set the environment up. Setup asks for sudo once, at the
start, and nothing after that.

On Windows, download and run Install-Lerd.exe from the Lerd desktop
app's latest release
.
It installs WSL, an Ubuntu distro and lerd inside it, then wires lerd into
Windows.

Already installed:

lerd update

Also available through apt (PPA), dnf (COPR), a NixOS flake, and Homebrew
(brew install lerd-env/lerd/lerd && lerd install, then brew upgrade lerd
to update), see the
installation docs.

Changelog

Features

  • 1da89ad feat(certs): issue local certificates without mkcert
  • 3a2c85e feat(mcp): tell assistants to ask the PHP language server before grep (#2390)
  • 7332785 feat(php): list the packages a rebuild changed
  • 2db7004 feat(stats): show lerd's launchd jobs in the macOS Resources widget
  • 2208258 feat(stripe): sign the listener in with a saved Stripe CLI login
  • 1de649e feat(ui): fold the plugin pages' invitation into a card
  • 4aea315 feat(ui): offer to delete a database's snapshots when dropping it (#2396)
  • 28f4db1 feat(ui): open the update dialog from the update count
  • 49b4851 feat(ui): remember the diff dialog's size and add a unified view
  • c008f0b feat(ui): send the add plugin tile straight to the catalog (#2402)
  • e658cd2 feat(ui): show behind, ahead and changed files on push, and open the files from push and switch (#2383)
  • 6e03f84 feat(ui): show the diff modal's changed files as a folder tree
  • 1c1651d feat(ui): split the Services page into Installed and Discover
  • d650ad9 feat(ui): stage a single change block from the diff
  • 5916b92 feat(ui): stage files and commit from the changes dialog
  • b3c9515 feat(ui): stash local changes before a pull or branch switch
  • 5de8f60 feat: add Traditional Chinese to the dashboard
  • 7c79e55 feat: add a plugin system with a catalog of approved plugins
  • 2066580 feat: add the WSL and Windows side to the bug report
  • 3b4cd6d feat: ask before a plugin may send notifications, with a switch per plugin
  • 7ad9056 feat: capture every outgoing HTTP request in the HTTP lens
  • 7e29c67 feat: carry a service's display name and domain in the API
  • a404cb5 feat: catch plugin failures and offer to report them to the author
  • 81a7fbb feat: catch the WSL setups where containers cannot start in doctor
  • fc255fc feat: check what a plugin needs before it runs
  • 67d2ebc feat: compact services grid and a coffee cup for kept-awake sites and services (#2394)
  • 6b74a30 feat: compare uncommitted changes side by side in the diff editor
  • 50160a5 feat: confirm each Windows tray action with a toast, and show the error when it fails
  • 2adf47e feat: dress the dashboard like Windows
  • 08273d8 feat: fetch the plugin catalog fresh when Browse opens
  • c000cd7 feat: follow the Noctalia palette in the dashboard
  • 893831d feat: give AI agents lerd's PHP language server
  • 672a3fc feat: give Plugins a page of its own, reached from the rail
  • 60cd519 feat: give every plugin surface a time limit
  • 68b0974 feat: give every shipped preset a label
  • c925521 feat: grow Tinker and the debug lens into full screen
  • 9ad44b7 feat: hand native notifications to the desktop app while it listens
  • f9952b0 feat: install lerd on Windows from PowerShell
  • e010046 feat: install lerd on a bare Windows machine with lerd-setup.exe
  • 90c060c feat: keep the debug bridge and profiler switches with the site list hidden
  • 852170a feat: keep the plugin illustration and cards at the foot of a full list
  • bb68d8e feat: let LERD_PLUGIN_CATALOG point lerd at another plugin index
  • 899b490 feat: let a plugin name the oldest lerd it runs on
  • 2c10307 feat: let a plugin put a card on a site's Overview
  • 09a3ff7 feat: let a plugin say which platforms it runs on
  • 5c303ce feat: let a plugin take charge of worktree databases
  • a3af0d8 feat: let an assistant build a plugin through the MCP plugin tool
  • 6dbbefd feat: let plugins send notifications
  • 962033d feat: let plugins ship their own services and frameworks
  • 9453a48 feat: let the site wizard remember where to start browsing
  • 852c708 feat: list the commits a pull or push moves and open each one's diff
  • 197ed27 feat: mark new notifications in the bell's list
  • 7d38873 feat: mark the services a plugin installs, and remove them with it
  • 90dee4e feat: move the Sail import into a plugin and add lerd s3:import
  • a7777d0 feat: name and link a plugin's author in its card
  • f8669c0 feat: offer the Lerd desktop app from the Windows installer
  • 760fc35 feat: open a site's snapshots from its database service card
  • 3e4dd45 feat: open a timeline row in its own lens
  • 05d5dee feat: open dashboards that take a session token already logged in
  • a086993 feat: pick the variant and version when adding a suggested service
  • e4366b3 feat: pin the sites folder in Explorer on WSL
  • 735a8f5 feat: plugin docs, screenshots, failure logs and lerd's look for plugin pages
  • f586d35 feat: raise Windows toasts for native notifications inside WSL
  • 76199be feat: register lerd with the AI clients on the Windows side of WSL
  • 8eeed1c feat: remember hide whitespace in the diff dialog
  • 187042c feat: remove lerd's Windows side on uninstall
  • 69ac446 feat: save the .env editor with Ctrl+S or Cmd+S
  • 144164c feat: serve the tray menu from the dashboard API for trays lerd does not draw
  • 6e6d2d0 feat: set up the Windows side of a WSL install from wsl:setup
  • 49e8ac7 feat: show a checkout's uncommitted changes from the dashboard
  • e4c6d30 feat: show each HTTP call's request and response in the lens
  • 421f04c feat: show each catalog plugin's version in Browse
  • a3b1f90 feat: show notifications in the plugin boilerplate
  • e72add7 feat: show plugin updates in the dashboard
  • d2c7962 feat: show plugins as cards, with a detail for each and the catalog a page at a time
  • 4875606 feat: show the lerd tray natively on Windows for WSL installs
  • 11c4a73 feat: show the plugin views as icons at the end of the header
  • 6988126 feat: show what plugins add when none is installed or listed
  • 426283e feat: stop a plugin the catalog revoked, and ask the user what to do
  • 2364860 feat: tell the user when the Podman Machine runs out of memory and offer more
  • 562b0fe feat: warn when a WSL project lives on a Windows drive

Bug Fixes

  • 6922b54 fix(certs): restore browser trust a store lost, and honour CAROOT in the docs
  • 13063cd fix(certs): trust the lerd CA in the macOS keychain through sudo (#2407)
  • 7601212 fix(ci): keep scanning when one base image fails and cover every tool build
  • 760d5dc fix(cli): make dump clear and dump status work on macOS (#2404)
  • e168104 fix(install): drop the old mkcert before any download can fail
  • 1c95c1e fix(install.ps1): keep the setup choices until they are applied
  • 95a437d fix(install.ps1): quote Windows paths for the Linux shell
  • db65380 fix(installer): stop naming mkcert in the installer
  • 78f8747 fix(nginx): stop warning about a reload while nginx is stopped (#2409)
  • 4c11aad fix(php): say so when the rebuilt image's packages cannot be read
  • b335df5 fix(stats): read podman once on macOS and keep comment blocks short
  • 08d5235 fix(stripe): keep the project name in step across saves and worktrees
  • 53db3cd fix(stripe): log each listener line once on Linux
  • e97ac54 fix(tui): rebuild the palette's list when new data arrives (#2400)
  • 5399a0e fix(ui): close only the open dropdown on Escape inside a dialog
  • 21c800f fix(ui): harden staging, commit and stash in the git dialogs
  • 1d4e00a fix(ui): keep Discover reachable and update failures visible
  • 4165c93 fix(ui): keep the plugin invitation cards where they are needed
  • d133f31 fix(ui): keep the stage button on the file list's visible edge
  • fb5bb85 fix(ui): keep the worktree tab's shadow from being cut off
  • 8711e29 fix(ui): line up sleeping services' names with the rest
  • cebf3e4 fix(ui): offer site grouping on host-proxy sites (#2403)
  • 8552fd9 fix(ui): read the staged mode literally and lock per checkout
  • def7e2f fix(wsl): fail setup when the Windows side fails, and start a closed desktop app
  • 67b1f20 fix(wsl): give each terminal launch its own shortcut
  • 2d71e93 fix(wsl): keep WSL's search domains when resolved takes over resolv.conf
  • 5e3772f fix(wsl): let Windows open a LAN share at its own IP
  • f2f49fb fix(wsl): pass relative Windows paths to lerd with forward slashes
  • 901469b fix: answer a command's running checks from one podman ps on macOS
  • 7503cc3 fix: ask GitHub when the tray's update check finds nothing cached
  • 5fa9e38 fix: ask for systemd when the WSL distro has none to turn on
  • bae77f6 fix: ask for the Linux user's password again when a resumed install never set it
  • 269c163 fix: bare docs links, .htm pages and light theme colours for plugins
  • eadcd78 fix: bind a config restore to its file before reading the backup
  • bd71e6e fix: boot the distro again from the agent when a site is looked up while it is down
  • c4f702e fix: bound diff reads and tell unreadable files apart
  • 4f1e5da fix: bound the machine stop wait and keep the confirmed size on retry
  • 177cd33 fix: bring Overview card switches to an Overview already open
  • 1d719b1 fix: bring up the default PHP version on start under the native runtime
  • 53a65c6 fix: build PECL extensions from the tarball when pecl cannot read the CDN
  • 2e49d8b fix: call lerd's DNS server lerd-dns, not dnsmasq
  • 195cd6e fix: catch up at once when the dashboard takes focus again
  • 6f80fb1 fix: clear a custom container worker's url file on stop
  • a94a0a6 fix: clear a stopped dev server's hot file and make its 502 readable
  • 01c1542 fix: clear delivered popups and the app badge when the dashboard is in front
  • 9dfab38 fix: clear the url file when a worker is stopped by site name alone
  • 5714866 fix: count a diff's added and removed lines the way git does
  • 9176a88 fix: count the real disk an unused PHP image frees in cleanup
  • 3a0e7e4 fix: create the database a dependent service expects
  • 9c6616d fix: detect an installed WSL on Windows in any language
  • 0adb671 fix: download what install.ps1 elevates inside the elevated step
  • 2ceca63 fix: draw the empty plugin views' illustrations as the dashboard
  • fc10c41 fix: drop the doubled gap before the site Doctor button
  • e80c450 fix: expect the Windows theme among the system themes in the palette store
  • 73057bb fix: fade the rail's rules at their ends
  • 9647db0 fix: fail the comment check on a base it cannot compare against
  • b4e3a1a fix: find the Windows claude a script policy can run, and its profile folder
  • b0691a2 fix: follow a service's port again once lerd env has started it
  • e291621 fix: follow block comments to their end, and check renamed and quoted paths
  • c95da15 fix: follow the snapshots route while the service stays open
  • 29861e0 fix: free the streaming toggle once its mode is confirmed
  • 68d7503 fix: give FrankenPHP and custom container sites a dev server location
  • f11fe8a fix: give PHP plugin scripts their context inside the container
  • 60a754b fix: give each catalog refresh its own temporary file
  • add6ada fix: give each native CA bundle writer its own temp file
  • e1b2d91 fix: give each untagged plugin message a tag of its own
  • 9996e8d fix: give phpMyAdmin its servers back after an idle wake
  • 1aeef4c fix: give the Env tab's editor mock the save command
  • 846e09a fix: give the Installed toggle its own icon
  • df96317 fix: give the container a terminal only when stdout is one too
  • 6281d5d fix: give the demo bar the demo's text colour and the browser bar the page's theme
  • 810dbec fix: give the route Debug jump its own icon (#2377)
  • 27b55f4 fix: guard the memory restart and say when it fails
  • 3dc6e42 fix: hand the agent over without failing on a fresh install
  • 40add2f fix: hold a Vite restart until the dev server first listens (#2391)
  • 7b65f35 fix: hold the picked variant while the download prompt is up
  • 2d5f8f5 fix: install PECL extensions with PIE so a pecl.php.net outage cannot strip them
  • e466941 fix: install lerd.exe only on WSL
  • 4b847b6 fix: keep CA roots the host distrusts out of the PHP images
  • 5035044 fix: keep Symfony HTTP capture on PHP 8.0 and 8.1 and mask split secrets
  • 5957176 fix: keep a clashing stash cleanly after a pull and offer to undo it
  • 383a516 fix: keep a config editor's late actions on the file they were opened for
  • f2e62ab fix: keep a hand-written service's label over a preset of the same name
  • 91057ce fix: keep a loading button as tall as a labelled one
  • af27470 fix: keep a missing provided env out of error_get_last()
  • 0c4dc7d fix: keep a plugin switch made while the menu's read is still on its way
  • d626e26 fix: keep a plugin's mark on its multi-version services across a start
  • 61eafd2 fix: keep a stopped lerd-dns off the uplink in the NetworkManager hook
  • 44a8bb3 fix: keep an https endpoint and read a named bucket without listing
  • 02b9d81 fix: keep catalog updates off plugins installed from elsewhere
  • 3c82de1 fix: keep each site's remembered Node version apart
  • cdf17b3 fix: keep every plugin failure and a broken plugin's log
  • e26c954 fix: keep every revoked plugin answer when two land at once
  • 5b2c8fd fix: keep following requests after rowid reuse or a failed watch
  • c4ddc2c fix: keep newer work and the snapshot offer when undoing a pull
  • 856ecc4 fix: keep pinging the watcher while a request waits for a sleeping site
  • 860a9f8 fix: keep plugin comments and the guide to what the review asked
  • 5b30fc3 fix: keep plugin consent safe to change while it is read, and say when saving it fails
  • b96f135 fix: keep retrying the agent's DNS listener while port 53 is taken
  • a9214ea fix: keep the Initialize git button steady while git status refreshes
  • 9570c88 fix: keep the Windows side in step with lerd and reachable from any folder
  • 358cc36 fix: keep the hot file cleanup inside the checkout and on every stop path
  • 2e26b15 fix: keep the init git button's padding when the list is hidden
  • 73f025a fix: keep the landing hero copy clear of the dashboard art
  • b78d63b fix: keep the native CA bundle in place for running pools
  • 613a35c fix: keep the query string through a dashboard token login
  • f995eb8 fix: keep the service managers out of the plugins package
  • f9bc9c5 fix: keep the stdout check for container ptys to WSL
  • d0e879b fix: keep the tray off on WSL instead of claiming to mask it
  • da088a1 fix: keep track of a worktree database until it is really gone
  • 70d544d fix: keep untagged and cross-plugin messages apart
  • 53fe279 fix: keep wsl.conf when it cannot be read
  • 2f20197 fix: keep wsl:setup's .wslconfig edits tidy and stop the distro idling out
  • 7774d54 fix: leave WSL DNS alone when it is opted out or the user's own
  • 82821bc fix: leave WSL's resolver alone while systemd is off
  • 14a5535 fix: leave a base that keeps another tag out of the freed total
  • b8d5d87 fix: leave services and workers asleep for php -v and other info flags
  • dee0181 fix: leave the WSL restart to an installer that does it itself
  • 72947cf fix: leave the Windows agent to the desktop app so Defender lets it be
  • f93459f fix: let a dependent start when another created its database first
  • 13ac26a fix: let a native install with no PHP versions get one from the dashboard
  • 0bef301 fix: let a site's subdomains fetch from its dev server
  • fe448e7 fix: let dev builds install plugins that need the next release
  • e39d9ef fix: let injected dashboard scripts run under a nonce-less policy
  • 83e28d8 fix: let lerd stop an agent it is not allowed to kill
  • e76320f fix: let only one plugin install place at a time
  • d3b43f9 fix: let plugins named like a staging folder install and update
  • 5b554c0 fix: let the local network reach lerd's LAN shares under WSL
  • d38f817 fix: list a database in Adminer and pgAdmin when a site's link starts it (#2388)
  • 9bc5fe1 fix: load lerd's ini files in native runtime workers
  • 1308c3a fix: lock sites.yaml across processes (#2380)
  • 6517401 fix: mark notifications read when the bell's panel closes
  • cf28659 fix: migrate to the official phpmyadmin docker image
  • 30aa628 fix: note a fresh run's id before its readiness probe, and document the check
  • 5443cae fix: offer the approved commit to a revoked plugin
  • 17100cd fix: offer the palette's plugin shortcuts only where plugins can be installed
  • 175ee38 fix: only count a lerd-dns listener that 127.0.0.1 can reach
  • 51fd38e fix: only follow Noctalia while it is running
  • 1185c12 fix: only point a container URL at a service's domain on the port it serves
  • f0100d0 fix: open Windows Terminal in front, on the distro, from the dashboard
  • 7964171 fix: open a timeline row the lens has not read yet
  • bf71bd4 fix: open a token-login dashboard on its own login when lerd lacks a credential
  • e36179c fix: open sites, folders, terminals and editors on the Windows desktop from WSL
  • 5851a65 fix: open the dashboard on Windows from the WSL tray, as an app when installed
  • 8849964 fix: open the site wizard at home when the remembered folder is gone
  • abc7b03 fix: pin the lerd bridge MAC on netavark older than 1.9
  • 4b24efb fix: point a moved service's localhost URLs at its published port
  • 3a18f3c fix: post no page popup until the notification sink is known
  • 1025e2f fix: probe a running service's readiness once per run, not on every command
  • 15e9411 fix: publish the plugin secret only once it is written
  • 531377c fix: re-check the Initialize git answer while the header stays open
  • f34a38f fix: re-read the pins when a download fails its checksum
  • 702b05a fix: read PowerShell answers without its progress records
  • d9ea6cf fix: read milliseconds portably in the vm lane's request linking checks
  • 8bafa09 fix: record a debug event at most once when its write is retried
  • 4b123aa fix: record the PHP patch a checksum retry actually fetched
  • 830dacf fix: redo a WSL resolver handover that stopped before its restart
  • 45e640d fix: redraw a service's name when its label loads
  • 651e3c1 fix: refresh admin UIs after a wake under the idle service lock
  • 9ff7768 fix: refresh plugin updates in an open dashboard
  • 74d1243 fix: refresh plugin updates in an open dashboard with notifications off
  • 3d5a089 fix: refuse PHP plugin scripts instead of running them in a container
  • 180fcad fix: refuse a plugin file linked outside its ui folder
  • a31ff8f fix: refuse the DNS teardown while the watcher still runs
  • 9782d52 fix: remove the skill of a plugin that is no longer installed
  • f38c48e fix: rename every mention of the skeleton in a new plugin
  • 64b244d fix: replace a plugin's failure log in one step
  • 9481d3a fix: report a bridge lookup that could not run
  • ef4650d fix: resolve .test inside WSL by handing resolv.conf to systemd-resolved
  • ba16f8e fix: resolve .test inside a WSL distro that has no systemd-resolved
  • e1d52cd fix: resolve tenant subdomains in Pest browser tests and wait for the watcher to exit on restart (#2379)
  • 40280ed fix: retire popups on a dashboard that opens in front, and the page's own fallbacks
  • 493d960 fix: rewrite a moved service's declared port onto its domain
  • c005df9 fix: run a worktree page's plugin calls in that worktree
  • 123664e fix: run dashboard terminal actions as lerd's own Linux user
  • c99f8c7 fix: run every domain change through one shared operation
  • 77f2300 fix: run lerd from Windows as the Linux user who set it up
  • 5825559 fix: run one admin UI refresh at a time after wakes, and document it
  • 020fdf2 fix: run php, composer and lerd's other shims from Windows with the paths the distro sees
  • ac88900 fix: run the build log edge to edge in modals that only show it
  • 0e1a608 fix: run the site's Node inside the PHP container, not Alpine's
  • 7301790 fix: say when the VM memory check could not run, and bound its machine lookup
  • e020886 fix: say when the lerd-php plugin could not be removed
  • bf2be3f fix: say why keeping a revoked plugin failed
  • dbd0026 fix: show a spinner while the streaming toggle waits for the sites
  • 81f0d7c fix: show the plugin header's tooltips below its buttons
  • f53e89f fix: show the tray's submenu status dots in colour on Windows
  • c5c53a0 fix: show why turning on systemd in wsl.conf failed
  • c384e43 fix: silence the site wizard's state_referenced_locally warning
  • 8159a73 fix: size the site services grid by its pane, not the window
  • 1a2d45b fix: skip backtick strings and close a block only at its own marker
  • e5b6aef fix: skip the tray on WSL without a note
  • 50a031d fix: stop asking macOS for Apple Music access to follow the accent
  • 21a4c9e fix: stop counting code lines that start with an asterisk
  • 05e9e7d fix: stop doctor flagging the macOS provided-env mount as missing
  • 155830d fix: stop everything a plugin script started when its time runs out
  • f64e088 fix: stop lerd install early on WSL without systemd
  • 8080b79 fix: stop offering the Flatpak desktop app inside WSL
  • 197f098 fix: stop pinning mkcert and bump every pinned host tool daily (#2385)
  • 999364c fix: stop the Overview refetching plugin cards on every live update
  • 2938bd4 fix: stop the watcher before uninstall tears DNS down
  • 924e831 fix: stop trying to start a service the user removed on every command
  • b66ec5f fix: stop what a lerd command started in its container when the command is cut short (#2389)
  • d7b622a fix: take MCP db snapshots from the site's own database service
  • d9617d0 fix: take lerd's Windows DNS rule back when its DNS is turned off
  • d75cedf fix: take the desktop app's registration back on lerd uninstall
  • a2073c9 fix: translate the suggested service picker prompt in Traditional Chinese
  • 91982a0 fix: treat --ri=json as an info flag too
  • ee8bff6 fix: trust lerd's CA from native PHP
  • ddc2f1d fix: trust lerd's CA on Windows from wsl:setup
  • 53e7a9d fix: trust only a confirmed stopped watcher before the DNS teardown
  • cca6970 fix: turn systemd on and restart WSL from lerd install
  • a791571 fix: use the Node build lerd shell fetched, from a folder the container sees
  • cad94ce fix: use the canonical image reference for the official phpmyadmin image
  • 60fd902 fix: wait for the Podman Machine to stop before resizing it
  • 2642db3 fix: wake a sleeping engine before listing its snapshots
  • b4fc727 fix: warn in doctor when WSL has not restarted since lerd took over resolv.conf
  • eedf408 fix: watch the Noctalia render from the moment the template is registered
  • 4f3d1d8 fix: write the xdebug ini for a version the native runtime fetches

Other

  • 6fbfbb1 Merge remote-tracking branch 'origin/docs/landing-refresh' into docs/landing-refresh
  • 99cc437 Merge remote-tracking branch 'origin/fix/wsl-dns-without-resolved' into fix/wsl-dns-without-resolved
  • d45dc3d Merge remote-tracking branch 'origin/fix/wsl-install-restarts-for-systemd' into fix/wsl-install-restarts-for-systemd
  • c66831a Merge remote-tracking branch 'origin/main' into chore/comment-length-hook
  • 55e008e Merge remote-tracking branch 'origin/main' into feat/plugin-docs-logs-and-look
  • 4579d81 Merge remote-tracking branch 'origin/main' into feat/plugin-notifications
  • f7937fa Merge remote-tracking branch 'origin/main' into feat/plugin-system
  • 3cab843 Merge remote-tracking branch 'origin/main' into feat/umami-autologin
  • ceb6bd9 Merge remote-tracking branch 'origin/main' into feat/wsl-windows-integration
  • 0dc668e Merge remote-tracking branch 'origin/main' into feat/wsl-windows-integration
  • 2700c6d Merge remote-tracking branch 'origin/main' into fix/dev-server-subdomain-cors
  • 809d799 Merge remote-tracking branch 'origin/main' into fix/native-ca-bundle
  • 578d671 Merge remote-tracking branch 'origin/main' into fix/uninstall-stops-watcher-first
  • 18865d1 Merge remote-tracking branch 'origin/main' into release/v1.38.0-beta.1
  • 1ff69c7 build: install lerd.exe with make install
  • c5fbaf0 build: move to Go 1.26.10 for the crypto/x509 fix
  • c038d16 chore: add a pre-commit hook that keeps comment blocks to three lines
  • 9c17f32 chore: add make dupes for a copy-paste report
  • b9ef1bf chore: bump pinned host tool versions (#2381)
  • 4d3f807 chore: bump pinned host tool versions (#2392)
  • 8cef67d chore: bump pinned host tool versions (#2397)
  • 25d8c19 chore: bump vite and vitest past their open security advisories
  • 1ff051f chore: drop the container unit hook nothing calls
  • 54cb881 chore: keep the consent prompt's comment to three lines
  • 9fcd7f2 chore: keep the host distrust comment to two lines
  • b03d16e chore: regenerate third-party licenses
  • da38f95 chore: remove code that only its own tests still reach
  • fce9e1f chore: remove functions nothing calls anymore
  • c52b7a1 chore: retrigger CI
  • 305a958 chore: retrigger CI
  • 9ecaf14 chore: shorten the Windows side's comments
  • 09b5a58 chore: shorten the git diff handler comment
  • 6d7056e chore: shorten the musl Node lookup comments
  • dd390ea chore: shorten the refreshAdminUIs comment
  • c0f09c1 chore: split the popup retirement comment
  • 1d46158 perf: follow the request store instead of rereading it every 15 seconds
  • 1bb8a90 perf: keep the kept-request set apart from the debug events
  • f7a4de5 perf: send a request's debug events over one connection
  • 4d3a84f perf: slow the dashboard's polls while its window is unfocused
  • fb8a7a2 refactor: drop lerd.exe's setup mode in favour of Install-Lerd.exe
  • fc7a8bd refactor: fold repeated Go code into shared helpers
  • a2ba83b refactor: fold the next layer of repeated code into shared helpers
  • 36bbeaf refactor: keep the desktop app's tray and notification feed to WSL
  • 5b31972 refactor: leave the Windows tray to the desktop app and keep the agent headless
  • 8296edf refactor: move code shared by the macOS and Linux files into unix ones
  • c513d44 refactor: pull the web UI's repeated helpers into shared pieces
  • 4207b07 refactor: read the tray's state through one reader
  • 2c7f07a refactor: render the dev server locations from one shared template
  • 4ff4e1e refactor: share one shell across the config editors and their confirmations
  • 2008e50 refactor: tell WSL apart once, in platform.Current
  • abf8812 release: say where Claude Code gets the language server
  • 8a9d369 release: update README and changelog for v1.38.0-beta.1
  • d0942d6 release: update README and changelog for v1.38.0-beta.2
  • 1bec3a4 release: v1.37.1 (#2254)
  • 42002a8 release: v1.38.0 (#2401)
  • 742e7af release: v1.38.0-beta.1
  • 9891171 release: v1.38.0-beta.3 (#2373)
  • 915fd21 test(vm): steady the lane's dashboard, NativePHP and no-answer checks

Full Changelog: v1.37.1...v1.38.0