Skip to content

v1.7.3

Choose a tag to compare

@github-actions github-actions released this 20 Oct 12:53
· 19 commits to master since this release

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 through npx, so they need Node.js. A new backend command,
    acp_runtime_env, reports whether node and npx are 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-missing notice, 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() and jump_connection() had no callers, and two
    glob re-exports plus seven imports were unused; all removed. The jump
    field stays — it is the only owner of the jump host's Arc<Connection>, and
    dropping it would tear the jump connection down the moment connect()
    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
    in tauri.conf.json and 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.