Skip to content

v1.20.0

Choose a tag to compare

@marmutapp marmutapp released this 17 Jul 09:09

Added

  • Remote dashboard + terminal control (Phase 4, explicit opt-in). Drive a
    node from another device over your tailnet: multi-device pairing, a draggable
    launch dock, in-dashboard terminals, and a mobile-friendly dashboard layout.
    Remote execute (launching AI tools / running terminal commands from the
    dashboard) is gated behind an explicit standing grant
    ([remote].allow_standing_terminal_control, default off) with per-session
    terminal leases, fanout bounds, revoked-lease handling, an execute-tier CSP,
    and a full audit lifecycle. Tailnet-only; nothing is exposed to the public
    internet. See docs/remote-access.md.
  • Process-network body capture + attribution wave. For observed processes
    routed through the proxy, capture proxied/plaintext request/response bodies
    into the new process_network_bodies store (agent migration 067) — never a
    claim of TLS visibility. Broader process observation and attribution: five
    adapters seed the pid bridge directly, a background attribution sweep and
    per-wave basenames tighten which session a process belongs to, and the
    dashboard gains process + raw-events surfaces. See
    docs/process-observability.md.
  • GPT-5.6 / OpenAI cache-write token capture. The proxy now parses
    input_tokens_details.cache_write_tokens from OpenAI/Responses usage (both
    the provider and streaming paths), nets cache-write against gross input
    correctly, and feeds the cachetrack engine so implicit-write events are
    observed instead of silently dropped. Wire field + expiry semantics
    documented in docs/general_info/openai_cache_expiry.md and
    docs/cache-tracking.md.
  • Dashboard time-window dropdown. A new date-range control adds 1h / 12h /
    1d
    windows plus explicit custom ranges alongside the existing options,
    resolving since/until with hours taking precedence over days. The range
    params thread through every dashboard page.
  • Benchmark integrity: retry-as-attempt + ephemeral runs. Each retry is now
    recorded as its own attempt (agent migration 068) so benchmark integrity
    reflects real attempt counts instead of collapsing retries. New ephemeral
    runs execute without persisting into the main corpus.
  • Compression: no-drop capability + honest lossy-eviction display. A new
    disable_drops capability lets the codex-safe recipe compress without lossy
    content eviction. All lossy eviction now routes through one classifier owner,
    and evicted bytes are subtracted from reported compression savings so
    "saved" reflects genuine, retrievable compression only — evicted content is
    surfaced additively (still recoverable via search_past_outputs markers,
    never counted as a saving).
  • M365 Copilot org analytics + browser-extension capture fixes. New
    observer-org m365 command and M365 Copilot analytics surface (Graph auth +
    surface_graph) on the org server — server-side only, never on the agent
    wire. Browser-extension capture (native-messaging host + service worker + the
    loopback ingest receiver) is fixed, with per-browser/per-OS host manifest
    writers including Windows registry hostfiles.
  • [dashboard].addr config knob (#8). The dashboard bind address is now
    configurable via [dashboard].addr (and the OBSERVER_DASHBOARD_ADDR
    environment override).
  • Kimi K3 model pricing added to the cost engine and the settings surface.

Changed

  • Codex fork/subagent token de-duplication + session lineage. Replayed
    fork/subagent turns are now skipped so a forked Codex session no longer
    double-counts tokens already attributed to its parent. New parent/child
    session-lineage tracking (agent migration 069, surfaced in the session-detail
    panel) makes the relationship explicit, and the new --codex-fork-dedup
    backfill pass reconciles historical fork double-counting.

Fixed

  • VS Code extension activation stall (#5). Fixed extension activation and
    observer-binary resolution; a new preferPathBinary setting lets the
    extension use a PATH-resolved observer instead of its bundled copy.
  • Codex 16 MiB record limit (#7). The Codex JSONL scanner's 16 MiB record
    cap is replaced with a shared readRecord (64 MiB bound + per-record skip) so
    an oversized record no longer aborts a whole session parse.
  • Prune now reclaims disk space. observer prune actually reclaims disk
    instead of only shedding rows, and startup latency previously spent in
    on-open integrity work is cut.

Upgrade notes

  • Agent DB migrates to schema 69 (migrations 061–069); the org server stays at
    schema 21 — both automatic.
  • Restart the daemon via the safe order (route off → stop → relaunch → route
    on; scripts/restart-daemon.sh) so the new binary and migrations load.
  • Remote execute + standing terminal control stay fully inert until you set
    [remote].allow_standing_terminal_control = true; pairing and remote viewing
    are tailnet-only.
  • Run observer backfill --codex-fork-dedup (or observer backfill --all) to
    reconcile historical Codex fork double-counting.

Downloads

Pre-built binaries for each supported platform are attached below. Linux variants bundle antigravity-bridge.exe next to the observer binary for WSL2 users of the Antigravity adapter.

Platform Asset
Linux x86_64 observer-v1.20.0-linux-x64.tar.gz
Linux arm64 observer-v1.20.0-linux-arm64.tar.gz
macOS x86_64 (Intel) observer-v1.20.0-darwin-x64.tar.gz
macOS arm64 (Apple Silicon) observer-v1.20.0-darwin-arm64.tar.gz
Windows x86_64 observer-v1.20.0-win32-x64.zip

Verify with sha256sum -c SHA256SUMS (or shasum -a 256 -c SHA256SUMS on macOS) from the directory containing the downloads.

Also available via npm: npm install -g @superbased/observer@1.20.0

Org server (Docker)

The self-hosted org server ships as a Docker image and as per-platform observer-org-v1.20.0-* archives (attached below).

docker pull ghcr.io/marmutapp/observer-org:v1.20.0

The image is keyless-signed with cosign. Verify it:

cosign verify ghcr.io/marmutapp/observer-org:v1.20.0 \
  --certificate-identity-regexp 'https://github.com/marmutapp/superbased-observer-private/.*' \
  --certificate-oidc-issuer https://token.actions.githubusercontent.com

Supply chain

CycloneDX SBOMs are attached: observer.cdx.json and observer-org.cdx.json.

SLSA Level 3 build provenance for the binaries is attached below as a *.intoto.jsonl attestation. The build runs on the private origin repo, so pass that as the source when verifying an extracted binary with slsa-verifier v2.7.0 or newer (older versions fail with unexpected tlog entry type: expected intoto:0.0.2, got dsse:0.0.1):

slsa-verifier verify-artifact ./observer \
  --provenance-path *.intoto.jsonl \
  --source-uri github.com/marmutapp/superbased-observer-private