merge: upstream/main into ethie/pm-clean
Bring in 597 upstream commits while preserving the branch's intentional
divergence (pm store, MSIX desktop, Termux removal).
Resolution notes:
- local_runtime/local-models cluster (30 both-added files): took upstream's
evolved version — our side was a stale feat-merge snapshot with zero
post-merge commits, and our non-conflicted importers were verified against
upstream's exports.
- install scripts (install.ps1/install.sh/setup-hermes.sh): kept our staged
pm-store bootstrappers (upstream still ships the old monolithic installer).
- Deleted-by-us files (node-bootstrap.sh, install_ps1 tests, termux.md):
kept deleted — the pm store replaced that machinery.
- runtime_repair.py: kept ours (pm-based), restored upstream's managed_uv.py
which surviving upstream files still import.
- Core files (run_agent, update_cmd, main.py, hermes_constants, estop,
aux_client, browser_tool, desktop entry, config_defaults): per-file merges
combining both sides' features (upstream fleet-wide estop, PID-identity
daemon kill, editable-install guard; our utf-8-sig sweep, stable channel,
PYTHONPATH desktop entry).
- Desktop/i18n: took upstream's flag-gated local-models components; merged
both sides' i18n keys; merged run-electron-builder.mjs and notifications
tests keeping both sides' tests.
- pyproject.toml: upstream's expanded exclude-newer list + our
google-cloud-pubsub entry; uv.lock regenerated from the merged pyproject.