Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Security
- **Pairing rejects out-of-order messages (`eap-noob`, `nvpair-cluster-manager`)**: A completion before the PIN was applied could reach Registered with an empty-key MAC, a key exchange before negotiation crashed either side, and the joiner accepted EAP-Success without a verified completion. A failed pairing message now also releases its pending session.
- **Trust-store paths are confined (`nvpair-cluster-manager`)**: A peer identifier such as `../identity` in an endorsed roster entry could write a pin outside `trusted/`. Unsafe identifiers are refused.
- **Bounded reads and fail-closed peers**: Node-info, model inventories, error-store ingest and remote progress frames are size-limited; a proxy whose peer pin has gone refuses the dial instead of falling back to an unpinned transport.

### Fixed
- **Uninstalling an engine keeps your models and settings (`nvpair-engine-manager`)**: LM Studio uninstall ran `rm -rf ~/.lmstudio` and oMLX `rm -rf ~/.omlx`. Each manifest now declares its model store, removal is confined and preserves it, and only the runtime is removed. PAIR uninstalls a vendor-installed engine only if it recorded installing it (engines installed before this release: use the vendor's uninstaller). oMLX no longer offers uninstall: its runtime is the oMLX app, which PAIR does not install.
- **Stopping a leftover engine works on macOS (`nvpair-engine-manager`)**: The process-image lookup read `/proc`, so stopping an engine PAIR lost the handle to was always refused.
- **Manual nodes survive worker restarts (`nvpair-ui-broker`, `desktop`)**: The broker owns `configs/manual-nodes.json` and replays it into every new manual-nodes worker, so Tailscale and VPN peers are no longer lost when the worker restarts or the terminal interface drives the broker.
- **Jobs that share a number stay apart (`desktop`, `nvpair-tui`)**: Jobs are keyed by origin, engine, run and id, so an Ollama job and an oMLX job with the same number no longer share a card or a row.
- **Workload frames are broadcast in order (`nvpair-workload-manager`)**: A removal can no longer overtake its upsert and resurrect a job on a peer, and a failed emit's retry is no longer swallowed as a duplicate.
- **mDNS sends from UDP 5353**: Queries and responses use the RFC 6762 source port.
- **The local node's inventory refreshes (`nvpair-node-scanner`)**: VRAM, CPU and memory in the discovery snapshot no longer stay at their startup values.
- Also: IPv6 link-local pairing keeps a locally valid zone; LM Studio and oMLX chat actions and every engine's model load (locally and from a peer) wait up to 10 minutes for headers; engine health probes reuse connections; every GPU shows on a node card; the renderer CSP is tighter; a closed stdout no longer crashes the app; model search finds Ollama models newer than the bundled catalog.

### Added
- **Configurable proxy header timeout**: `--response-header-timeout` or `NVPAIR_PROXY_RESPONSE_HEADER_TIMEOUT` (default unchanged at 120 s) for requests that queue or wait on slow model loads.

## [0.8.0] - 2026-11-02

Unsigned, unnotarized **macOS arm64 release** for this fork. Windows, Linux
Expand Down