mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-06-24 10:52:21 +00:00
The desktop self-update runs `hermes update` then `hermes desktop --build-only`, and only relaunches if the rebuild returns 0. The first `--build-only` can exit nonzero on a still-settling post-update tree or a network-blocked Electron fetch that the installer's self-heal repaired mid-run — so both updaters (the Tauri setup binary and the in-app POSIX path) bailed before the relaunch step. The update landed but the app never restarted; a manual launch worked because the heal had completed. Retry `--build-only` once in both paths before failing, mirroring the retry-once `hermes update` already does (and the CLI `hermes update`'s own desktop rebuild). A second run builds clean off the healed dist and is a near-no-op when the first actually succeeded (content-hash stamp). - update.rs: retry stage 2; add rebuild_needs_retry() + test - main.cjs: retry via new update-rebuild.cjs helper (behavior-tested)
29 lines
928 B
JavaScript
29 lines
928 B
JavaScript
'use strict'
|
|
|
|
/**
|
|
* Retry-once policy for the desktop `--build-only` rebuild during self-update.
|
|
*
|
|
* The first rebuild can return nonzero on a still-settling post-update tree or a
|
|
* network-blocked Electron fetch that the installer's self-heal repaired mid-run.
|
|
* A second attempt then builds clean off the healed dist (the content-hash stamp
|
|
* makes it a near-no-op when the first actually succeeded). Without the retry the
|
|
* updater bails before the relaunch step — the app updates but doesn't restart.
|
|
*/
|
|
|
|
function shouldRetryRebuild(code) {
|
|
return code !== 0
|
|
}
|
|
|
|
/**
|
|
* Run `rebuild()` (async, resolves `{ code, ... }`), retrying once on failure.
|
|
* Returns the final result.
|
|
*/
|
|
async function runRebuildWithRetry(rebuild) {
|
|
let result = await rebuild(0)
|
|
if (shouldRetryRebuild(result.code)) {
|
|
result = await rebuild(1)
|
|
}
|
|
return result
|
|
}
|
|
|
|
module.exports = { shouldRetryRebuild, runRebuildWithRetry }
|