Repository navigation
v1.7.3
eShell 1.7.3
Release date: 2026-10-20
This one is about the AI panel explaining itself, and about the window frame
getting rounded corners on the two platforms that did not have them. A machine
without Node.js used to find out at the moment an agent failed to spawn, from a
raw error string; now it is told, in words, what is missing and where to get
it.
Node.js preflight
- The toolchain is probed when the AI panel opens. The built-in agents are
launched throughnpx, so they need Node.js. A new backend command,
acp_runtime_env, reports whethernodeandnpxare on the machine and
which versions they are. Nothing about the command surface changed: it is
purely additive, so an older frontend keeps working against a newer backend. - A standing card says what is missing. When either tool is absent, a card
appears at the top of the AI panel: it names the missing tool, shows the
version of the ones that are installed, links to nodejs.org, and offers a
重新检测button. Installing Node.js and re-checking is enough — no need to
restart eShell. - The card outlives a failed start. The notice row in the transcript says
what happened; the card says what to do about it. Both are up at the same
time, on purpose. - The transcript also gets an
env-missingnotice, so the reason is still
there after the card is scrolled out of the way.
The error card
- Title and detail are separate now. The old row printed one red line with
the label and the raw error glued together (Failed to start agent: spawn npx ENOENT). The label is a title, the raw error is the body, and the body is
set in a monospace face so it can be searched for and read out. - Long errors collapse. Past 220 characters the body is truncated behind a
展开详情button, so a stack trace does not push the rest of the transcript
off the screen. - An error can be copied. The card carries a copy button that copies
title: body. - A notice with nothing to say is not a card.
会话已结束and its
neighbours used to get the same bordered box as a failure. They are now one
muted line: a card has a border and a background, and that is a lot of
interruption for a line of context. - The card's look follows the toast stack — an icon chip with a same-colour
glow behind it and a tinted border — so an error in the transcript and a
toast look like the same family.
The same failure is reported once
A failing command tends to surface twice: the command's own rejection, and the
stream event that reports the same outage a moment later. The panel used to
show both. A failure is now reported once, and a repeat of it inside five
seconds is swallowed. A later, unrelated failure still comes through.
Rounded window corners (Linux and macOS)
- The frame is no longer a hard rectangle. Windows already had the
compositor's rounded corners; Linux and macOS did not. Those two platforms
now declare a transparent window and the shell rounds itself — 10px, with
the desktop showing through the corners. - Maximizing drops the radius. A maximized window with rounded corners
leaves notches at the screen edges. - The start-up splash rounds with it, and the native window background is
no longer tinted on those platforms — a tint would fill the corners straight
back in. - Windows is untouched: native rounded corners and the system drop shadow, both
unchanged.
Smaller changes
Connection::disconnect()andjump_connection()had no callers, and two
glob re-exports plus seven imports were unused; all removed. Thejump
field stays — it is the only owner of the jump host'sArc<Connection>, and
dropping it would tear the jump connection down the momentconnect()
returns.- The maximized state is now tracked in one place instead of two, so the title
bar's button and the shell's corner radius cannot disagree.
Validation
npm test— 436 passing (42 files)cargo test— 251 passing, plus 2 for the window config- The release-prep version bump was checked to leave both suites green before
tagging, so a build failure on a tag is a CI environment problem rather than
a version mismatch. - The platform window configs repeat the whole window object, because Tauri
merges platform configs with JSON Merge Patch and that replaces arrays
wholesale. A test holds the copies to the base config, so they cannot drift
apart silently. - macOS transparency needs
macOSPrivateApi, and the Tauri build script
checks the Cargo features against the base config alone — so the flag lives
intauri.conf.jsonand the platform files carry only the window. - The rounded corners were not verified on a Linux or macOS machine: this
release was prepared on Windows, where the transparent-window path is
inactive. The configuration, the splash and the CSS radius are all in place,
but the two platforms deserve an eyeball before the next release.