Files
hermes-agent/apps
ThereWasAYang 96108880ad fix(skills): a refused hub update or uninstall exits non-zero too; blocked installs toast
Extends the salvaged #118302 fix across the rest of the Desktop's hub actions.
The Desktop spawns `hermes skills install|update|uninstall` and reports failure
only from the exit code, so every refusal that exited 0 was a silent no-op:

- do_update: an update whose new version the scan gate refuses (do_install
  -> False) is counted as "Not updated" instead of "Updated N skill(s)", and
  the command exits 1 (Capabilities -> "Update installed").
- do_uninstall: a refused removal (not a hub skill, unsafe path) returns
  False -> exit 1; True on success, None when the prompt is declined.
- skills_command returns the code instead of sys.exit()-ing from library
  code; cmd_skills returns it so main()'s existing `rc = args.func(args)`
  owns the exit status (the in-app console's _capture_output handles an int).
- TUI `/skills install` (skills.manage RPC): #128443 (merged) already keys
  the RPC off do_install's True/False/None; this commit supplies the True
  that RPC expects on success (on main do_install still returns None, so a
  successful TUI install answers error 5031).
- Desktop parseInstallBlocked: the hard-block clause is matched across the
  80-column Rich wrap ("... Hermes never\ninstalls unverified ..."), which a
  real arxiv install produces; otherwise the toast mislabels an unverified
  hard block as overridable.

Refs #118301
2026-10-05 16:00:48 -07:00
..