diff --git a/pkgbuilds/hermes-desktop/PKGBUILD b/pkgbuilds/hermes-desktop/PKGBUILD index 9a54fd9..0ad83e7 100644 --- a/pkgbuilds/hermes-desktop/PKGBUILD +++ b/pkgbuilds/hermes-desktop/PKGBUILD @@ -5,20 +5,20 @@ # so there is no vendor binary to repackage. Their electron-builder config does # carry a Linux target, though, and it works; this builds it. # -# The version tracks PyPI rather than the newest tag. The app and the Hermes -# CLI have to agree on the dashboard session-token handshake, and a newer app -# against an older CLI fails its readiness probe with a 401 and never starts. -# Upstream never hits this because their installer builds the app from the same -# checkout it installs the CLI from -- and refuses a non-editable source -# install, so the CLI cannot simply be pinned to the app's commit instead. -# v2026.7.20 is the tag behind hermes-agent 0.19.0 on PyPI; both move together. +# The app only runs against a Hermes runtime built from its own commit, so it +# provisions one itself under ~/.hermes on first launch and the package stays +# on the newest tag. Pairing it with the mise CLI instead was tried and does +# not work: PyPI trails the tags, and the version gap fails the readiness probe +# with a 401. Pinning back to the tag behind PyPI's release does not rescue it +# either -- v2026.7.20's desktop hangs after "backend is ready" without ever +# opening a window, against its own matching runtime. # # The app is only a shell: it runs `hermes serve` against a Hermes CLI it does # not ship, and clones its own copy with the upstream install script when it # finds none. /usr/bin/hermes-desktop heads that off. See hermes-desktop.sh. pkgname=hermes-desktop -pkgver=2026.7.20 +pkgver=2026.8.18 pkgrel=1 pkgdesc='Native desktop shell for Hermes Agent' arch=('x86_64') @@ -31,8 +31,10 @@ depends=( 'cairo' 'dbus' 'expat' + 'curl' 'gcc-libs' 'gdk-pixbuf2' + 'git' 'glib2' 'glibc' 'gtk3' @@ -50,12 +52,10 @@ depends=( 'libxkbcommon' 'libxrandr' 'mesa' - 'mise' 'nspr' 'nss' 'pango' 'systemd-libs' - 'uv' 'xdg-utils' ) @@ -73,15 +73,15 @@ options=('!strip' '!debug') # before falling back to `git rev-parse`. That fallback is wrong here: makepkg # builds inside this repository, so git ascends out of srcdir and stamps the # app with an omarchy-pkgs commit that means nothing upstream. -_commit=3ef6bbd201263d354fd83ec55b3c306ded2eb72a +_commit=e624e9fde561e1add9388384012b295fde669ade _srcdir="hermes-agent-${pkgver}" source=("${pkgname}-${pkgver}.tar.gz::${url}/archive/refs/tags/v${pkgver}.tar.gz" 'hermes-desktop.sh' 'hermes-desktop.desktop' 'hermes-desktop.png') -sha256sums=('285f3fc134ff466a90065e1517801a68993733b807158ee8f32aa01613786990' - 'e7c0e1fd343e9b013de4575fbefdd4f03b3b62fb5c2c2dd3c508f4a26b6608ea' +sha256sums=('1e3d39d3638ec15fa9d31af262568a953e9272090deb1c50c44cd401175f5b80' + 'fc5f07c9bf77c82366ba9f631ae2c86ba657ca2a4f8712034ba03800e88fe699' '3ef685bfcf366776b025d26c37d32854d8d4aa2023b2bd07c8e08b001ef1e8c4' 'd60d164e24fdcf6532133b8ea43c77a201e4b9e9dbc396187b58d51d8590ef52') diff --git a/pkgbuilds/hermes-desktop/hermes-desktop.sh b/pkgbuilds/hermes-desktop/hermes-desktop.sh index 8bfbcd2..bad5de5 100644 --- a/pkgbuilds/hermes-desktop/hermes-desktop.sh +++ b/pkgbuilds/hermes-desktop/hermes-desktop.sh @@ -1,35 +1,14 @@ #!/bin/bash set -euo pipefail -# The desktop app is only a shell: it runs `hermes serve` against a Hermes CLI -# it does not ship. Finding none it offers to install its own, which clones an -# unpinned checkout into ~/.hermes/hermes-agent -- and that copy then wins -# forever, because the app checks ~/.hermes before it checks PATH. -# -# So guarantee the CLI here rather than relying on anything else having run. - -tool='pipx:hermes-agent[extras=all]' -python='3.13' - -# Hermes declares Requires-Python <3.14; left to itself uv builds the venv -# against Arch's 3.14 anyway and only fails later, inside a dependency. The -# cooldown override is exported so the version resolved to run is the one just -# installed. Both mirror omarchy-install-hermes-cli -- keep them in step. -export UV_PYTHON="$python" -export MISE_MINIMUM_RELEASE_AGE=0 - -if command -v omarchy-install-hermes-cli >/dev/null 2>&1; then - omarchy-install-hermes-cli --now -elif ! [[ -d "$(mise where "$tool" 2>/dev/null)/hermes-agent/lib/python$python" ]]; then - echo "Installing the Hermes CLI (this takes a minute)..." >&2 - mise use -g --quiet --force "$tool" || true -fi - -# Hand the app the real executable rather than leaving it to search. Its PATH -# probe allows 15 seconds, which nothing that still has installing to do can -# meet. -hermes_bin="$(mise where "$tool" 2>/dev/null)/bin" -[[ -d $hermes_bin ]] && export PATH="$hermes_bin:$PATH" +# Hermes Desktop is a shell around a Hermes runtime, and it only works against +# one built from its own commit. A CLI from PyPI is always a different release +# -- PyPI trails the tags -- and the mismatch fails the app's readiness probe +# with 401 Unauthorized. So keep it away from whatever `hermes` is on PATH, +# which on Omarchy is the mise CLI installed for the terminal agent, and let +# the app provision and manage its own runtime under ~/.hermes. That is the +# arrangement upstream ships, and the only one that starts. +export HERMES_DESKTOP_IGNORE_EXISTING=1 # Chromium's own Ozone detection falls back to XWayland often enough to matter, # and the result is a blurry window on every scaled display. Ask for Wayland