|
2 | 2 |
|
3 | 3 | All notable changes to SuperBased Observer are documented here. |
4 | 4 |
|
5 | | -## [Unreleased] |
| 5 | +## [1.24.0] — 2026-07-24 |
| 6 | + |
| 7 | +### Added |
| 8 | + |
| 9 | +- **Session Cockpit: a live per-terminal floating panel.** Every embedded |
| 10 | + dashboard terminal running an AI tool gains a "⊙ Session" button that |
| 11 | + opens a compact, draggable cockpit next to the terminal — the glanceable |
| 12 | + companion to the session-detail page, not a clone of it. It shows, live: |
| 13 | + a now strip (last activity, tokens/sec with an honest measured/estimated |
| 14 | + basis badge, live process count), total cost with the AI/tool split and |
| 15 | + the next-message cost band, context fill against the model budget, token |
| 16 | + buckets, the 5h/7d rate-limit gauge (proxy-routed sessions), prompt-cache |
| 17 | + expiry countdown chips, system telemetry (CPU/memory/disk sparklines and |
| 18 | + the spawned-process tree from process observation, plus proxied API |
| 19 | + traffic with byte totals when body capture measures them), and the last |
| 20 | + five turns deep-linking into the session-detail page. |
| 21 | +- **Terminal→session live linkage.** New `GET /api/terminal/session/<token>` |
| 22 | + resolves a running terminal to its correlated observer session (id + |
| 23 | + correlation confidence, refusal-ordered so remote callers can never probe |
| 24 | + token existence); the cockpit keeps polling so a later authoritative |
| 25 | + correlation re-points the panel, and links below the out-of-band tier |
| 26 | + carry an explicit "≈ linked" badge. |
| 27 | +- **One-click process-capture enable.** When process observation is off, the |
| 28 | + cockpit's System section explains what's missing and offers an atomic |
| 29 | + server-side enable (`POST /api/process/enable-capture`): non-runnable |
| 30 | + backend selections switch to automatic with the previous value named in |
| 31 | + the notice, hosts with no runnable capture backend get an honest |
| 32 | + "unavailable on this machine" instead of a false success, and capture |
| 33 | + honestly starts only after the daemon restarts. |
| 34 | +- **`?tail=N` on the session messages API** — returns the true last N rows |
| 35 | + of the full timeline for fast pollers (explicitly rejected when combined |
| 36 | + with pagination parameters). |
| 37 | +- **`?summary=1` on the session network API** — a server-side aggregate |
| 38 | + separating proxied API calls (with request/response byte sums from body |
| 39 | + metadata) from OS-observed process connections. |
| 40 | + |
| 41 | +- **Tool-binary resolution with classified verdicts.** Every embedded- |
| 42 | + terminal launcher now resolves its tool binary through a shared ladder — |
| 43 | + process PATH, then a memoized login-shell PATH capture, then native |
| 44 | + install-location probing, then (WSL only) a foreign-Windows-home check — |
| 45 | + and classifies the result as `ok`, `ok_off_path`, `shadowed`, |
| 46 | + `foreign_only`, or `not_found`. Fixes the class of bug where a |
| 47 | + Windows-installed npm shim shadowed (or stood in for) a native binary on |
| 48 | + WSL, and the launcher's stale process PATH meant a fresh native install |
| 49 | + wasn't picked up without restarting the daemon. |
| 50 | +- **Guided one-click install.** When a tool isn't natively resolvable, the |
| 51 | + New Terminal dialog shows the verified official install command and an |
| 52 | + "Install in terminal" button that runs it in a visible PTY. Gated by the |
| 53 | + new `[terminal.launch].allow_install` config key (default on). |
| 54 | +- **`observer doctor` and `observer adapters` surface binary-resolution |
| 55 | + health**, including a `foreign_only` bucket (tool installed on Windows |
| 56 | + only, not launchable from a WSL daemon) and a best-effort Windows |
| 57 | + proxy-route reachability check. |
| 58 | +- **`observer init` writes Windows-side proxy routes.** When the daemon |
| 59 | + runs in WSL, `init` can now also point a Windows-installed claude-code or |
| 60 | + codex at the daemon's proxy (`localhost:8820`, relying on WSL2's |
| 61 | + `localhostForwarding`), so accurate token capture works even when the AI |
| 62 | + tool itself is installed on the Windows side. |
| 63 | +- **`[launch.tools.<tool>].path`** config override to pin a specific binary |
| 64 | + path per tool, bypassing the resolution ladder. |
| 65 | +- Custom terminal project paths typed in Windows form (`C:\Users\…`) are |
| 66 | + now translated to their WSL mount equivalent before validation. |
| 67 | + |
| 68 | +### Fixed |
| 69 | + |
| 70 | +- **Concurrent dashboard config saves can no longer lose updates.** All |
| 71 | + in-process config read-modify-write paths — section saves, pricing, |
| 72 | + backup restore, remote-manage toggles, terminal limits/policy, |
| 73 | + experiments, and the admission-policy persister — now serialize on one |
| 74 | + shared lock in the config package (cross-process CLI writes remain |
| 75 | + outside a mutex's reach and are documented as such). |
| 76 | +- The attach-replay bound test no longer flakes on slow runners (the |
| 77 | + precondition now waits for the pump to drain the full produced stream). |
6 | 78 |
|
7 | 79 | ## [1.23.0] — 2026-07-23 |
8 | 80 |
|
|
0 commit comments