Skip to content

v1.7.24

Choose a tag to compare

@marmutapp marmutapp released this 01 Jun 21:53
· 20 commits to main since this release

Release headline. Codex per-event token rows: each
token_count event in a codex rollout now lands as its own
token_usage row, with a new turn_id column grouping them
back to the user-turn. The dashboard's Session Detail panel
adds a Turn / Inference toggle on codex sessions so operators
can drill from the per-turn rollup (default, preserves existing
UX) into per-inference billing detail. Plus: canonical
PRIVACY.md, recipe-naming clarity sweep (codex-variant =
OpenAI's -codex reasoning fork; codex-safe = plain GPT
under codex CLI; both are recipes for the codex CLI), and a
one-shot backfill migration (033) for legacy codex rows whose
ON CONFLICT preserved the pre-v1.7.24 message_id = TurnID
shape.

Schema (v1.7.24)

  • Migration 032token_usage adds turn_id TEXT column
    • idx_token_usage_session_turn index. NULL on existing
      rows; dashboard's COALESCE(turn_id, message_id, source_event_id)
      fallback keeps them rendering correctly without a backfill.
  • Migration 033 — one-shot backfill of legacy codex rows:
    moves the old message_id (which IS the TurnID) into
    turn_id, replaces message_id with source_event_id.
    Idempotent. Non-codex rows untouched.

Added (v1.7.24)

  • ?detail=inference query parameter on
    /api/session/<id>/messages; default behavior unchanged.
  • Frontend Turn / Inference SegmentedControl in the Session
    Detail panel's Messages section (visible only on codex
    sessions — Anthropic adapters already emit one row per
    upstream msg_xxx, the toggle would be a no-op there).
  • PRIVACY.md canonical privacy doc at repo root.

Changed (v1.7.24)

  • Codex adapter MessageID semantic shifts from per-turn
    to per-model-inference: MessageID = "tk:<file>:L<n>"
    (the per-event identifier) instead of the old TurnID.
    TurnID = turnID is now stored separately on the
    TokenEvent struct and persisted to the new column.
    This aligns codex with claudecode's "MessageID = upstream
    API-call identifier" contract.
  • Recipe TOML headers rewritten to lead with model-family
    decisions: explicit USE-WHEN / DO-NOT-USE blocks with
    example model IDs + a Naming clarification paragraph for
    the codex-* recipes. Same clarity in README and npm
    README compression tables.
  • README + npm README updated with stronger privacy
    paragraph + PRIVACY.md link. npm README adds a "Measured
    savings" sub-section under Compression with v1.7.23
    empirical numbers and honest caveats.

Fixed (v1.7.24)

  • Stale "code compressor is opt-in only" comment in npm
    README (claude-code recipe has had code in defaults
    since v1.7.23 / V7-24).
  • Legacy codex rows whose message_id was preserved as
    pre-v1.7.24 TurnID-UUID after the v1.7.24 adapter
    re-emitted under ON CONFLICT (migration 033).

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.7.24-linux-x64.tar.gz
Linux arm64 observer-v1.7.24-linux-arm64.tar.gz
macOS x86_64 (Intel) observer-v1.7.24-darwin-x64.tar.gz
macOS arm64 (Apple Silicon) observer-v1.7.24-darwin-arm64.tar.gz
Windows x86_64 observer-v1.7.24-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.7.24

Org server (Docker)

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

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

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

cosign verify ghcr.io/marmutapp/observer-org:v1.7.24 \
  --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