# Hypa 1.1.0

Hypa 1.1.0 shows what the programs in your panes are doing, through the Program Status Protocol (OSC 7501).
It also reconnects a lost cube in place, keeps QUIC cubes on different machines apart, and fixes upgrades with the install script.

## Highlights

### Program status in panes (OSC 7501)

A program in a Hypa pane can now report its status with the [Program Status Protocol (OSC 7501)](https://mitchellh.com/writing/program-status-osc7501).
The states are `idle`, `working`, `blocked`, `done` and `error`, with an optional kind, progress and message.

- The agents sidebar shows one status row for each pane, for example `cargo working 40% Building`.
- A tab that is not in view shows a badge: `◆` blocked, `✖` error, `● 40%` working, `●` done.
- A pane that needs you (blocked, done or error) shows a notice, through the `ui.toast.delivery` setting.
  Notices are rate limited, and a pane that is in view does not show one.
- Hypa sends one summary of the session to your outer terminal, for example Ghostty.
  The `ui.host_status` setting controls this: `auto` (the default) sends it only after the terminal answers the detection query, `on` always sends it, and `off` never sends it.
- `done` and `error` go away from the badge and the summary after you look at the pane. The sidebar row keeps them.
- A report from a program takes precedence over agent detection. A report from `pane.report_agent` takes precedence over both.

### Cubes reconnect in place

Before, a laptop sleep or a network drop left the view on a dead cube with `<cube> health timed out`.
Keys went nowhere until you selected Local and then the cube again.

- The view now stays on the cube and keeps the last frame. Hypa dials the cube again at once, then after 0.5, 1, 2 and 4 seconds, then every 5 seconds.
- For the first 2 seconds the status line stays empty. Then it shows `Reconnecting to <cube>…`.
  After 30 seconds it shows `<cube> is unreachable. Retrying…`. Hypa keeps trying, and the view comes back with no input from you.
- After a wake from sleep, Hypa finds a dead link in 3 seconds, not 10.
- A failed connection shows its reason, for example `[join_denied]`, and writes it to the log.
  `hypa connectivity accept` logs each join that it refuses.

### QUIC cubes on different machines

- `hypa work placements add-quic` no longer replaces a cube that has the same session name on a different machine.
  Before, a second machine that also ran session `default` silently took over the first cube.
  A cube is now the owner, the target and the session together.
- `add-quic --device DEVICE_ID` sets the device that joins the cube.
- With no device set, the join tries your paired devices one at a time and keeps the first one that the host accepts.
  If the host accepts none of them, the error tells you to use `add-quic --device`.

### Fixes

- **An upgrade with the install script now changes the version.**
  Before, every upgrade after the first install said that it succeeded but kept the old version.
  Run the new `install.sh` one time to repair an install that is affected.
- **`hypa` commands such as `hypa run` and `hypa --version` no longer crash when the current directory was deleted.**
  This happened when an agent removed the directory that it ran in, and the next wrapped command ran from it.
  `hypa mux serve` and `hypa serve` can still fail in that case.
  Thanks to @giuseppecrj ([#105](https://github.com/Hypabolic/Hypa/pull/105)).
- **The mux no longer stops sending events after a client disconnects at the wrong moment.**
  Shutdown no longer hangs in that case.
- **A pane whose program exits during start-up now shows as exited**, not as running.
- **A program status rename or label change is no longer lost** when two updates arrive at the same time.
- **Security:** `System.Security.Cryptography.Pkcs` is now 10.0.13, which fixes two denial-of-service faults (CVE-2026-84008 and CVE-2026-70162).

## Platforms

- Linux and macOS, on x64 and arm64.
- Windows is not a mux host.

## Upgrade notes

- Restart the local mux after you upgrade, so that the mux uses the new version.
  Use the sidebar's **↻ restart to update** action, or run `hypa mux restart` from a terminal outside Hypa.
  A restart closes every pane and disconnects active peers.
- A remote cube must also run 1.1.0 to send program status to your view.
- If you installed with a package manager, upgrade with `brew upgrade hypa`, `npm install --global @hypabolic/hypa`, or `pipx upgrade hypa`.
  If you installed with `install.sh`, `hypa update` upgrades in place.

Report a fault at https://github.com/Hypabolic/Hypa/issues.
